Topik ini menjelaskan cara mengunggah aliran data—seperti aliran file dan aliran jaringan—ke objek dalam bucket menggunakan unggah streaming.
Unggah aliran file
Kode berikut menunjukkan cara mengunggah aliran file ke objek bernama exampleobject.txt di folder exampledir/ dalam bucket examplebucket.
const OSS = require('ali-oss');
const fs = require('fs');
const client = new OSS({
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke oss-cn-hangzhou.
region: 'yourRegion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket. Misalnya, examplebucket.
bucket: 'examplebucket',
});
async function putStream () {
try {
// Gunakan chunked encoding. Saat Anda menggunakan antarmuka putStream, SDK secara default mengirim permintaan HTTP PUT dengan chunked encoding.
// Tentukan path lengkap file lokal untuk membaca aliran data.
// Jika Anda tidak menentukan path lokal dalam path lengkap file lokal, file akan diunggah dari path lokal yang sesuai dengan proyek program contoh secara default.
let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
// Tentukan path lengkap objek. Misalnya, exampledir/exampleobject.txt. Path lengkap objek tidak boleh memuat nama bucket.
let result = await client.putStream('exampledir/exampleobject.txt', stream);
// Jangan gunakan chunked encoding. Jika Anda menentukan parameter contentLength dalam options, chunked encoding tidak digunakan.
// let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
// let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
// let result = await client.putStream(
// Parameter stream dapat berupa objek apa pun yang mengimplementasikan readable stream, seperti aliran file atau aliran jaringan.
// 'exampledir/exampleobject.txt', stream, {contentLength: size});
console.log(result);
} catch (e) {
console.log(e)
}
}
putStream(); Unggah aliran jaringan
Kode berikut menunjukkan cara mengunggah aliran jaringan ke objek bernama example.png dalam bucket examplebucket.
const OSS = require("ali-oss");
const fs = require("fs");
const urllib = require("urllib");
const client = new OSS({
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke oss-cn-hangzhou.
region: 'yourRegion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket. Misalnya, examplebucket.
bucket: 'examplebucket',
});
// Tentukan URL aliran jaringan.
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20220908/cbgh/image-processing_example.jpg";
// Impor duplex stream.
// Parameter stream dapat berupa objek apa pun yang mengimplementasikan readable stream, seperti aliran file atau aliran jaringan.
const Duplex = require("stream").Duplex;
// Buat instance duplex stream.
let stream = new Duplex();
urllib.request(url, (err, data, res) => {
if (!err) {
// Terima data melalui duplex stream.
stream.push(data);
stream.push(null);
client
// Tentukan path lengkap objek. Misalnya, example.png. Path lengkap objek tidak boleh memuat nama bucket.
.putStream("example.png", stream)
.then((r) => console.log(r))
.catch((e) => console.log(e));
}
});Referensi
Untuk contoh kode lengkap mengenai unggah streaming, lihat contoh di GitHub.