Permasalahan
Saat menggunakan .NET SDK untuk mengupload file dari MemoryStream, operasi upload mungkin berhasil, tetapi file yang dihasilkan di OSS memiliki ukuran 0 byte. Masalah ini terjadi karena penulisan data ke MemoryStream memindahkan penunjuk aliran ke akhir stream.
Solusi
-
Sebelum meneruskan aliran ke metode upload, atur ulang penunjuk aliran ke awal dengan memanggil
mStream.Seek(0, SeekOrigin.Begin);.public static void MemStreamUpload() { Uri endPoint = new Uri("http://oss-cn-beijing.aliyuncs.com"); string accessKeyID = "your_access_key_id"; string accessKeySecret = "your_access_key_secret"; string bucketName = "your_bucket_name"; string key = "ossobject.jpg"; string filepath = @"D:\1.jpg"; ObjectMetadata metadata = new ObjectMetadata(); // Anda dapat mengatur metadata kustom. metadata.UserMetadata.Add("myfield", "test"); OssClient ossClient = new OssClient(endPoint, accessKeyID, accessKeySecret); MemoryStream mStream = new MemoryStream(); Image image = Image.FromFile(filepath); image.Save(mStream, ImageFormat.Jpeg); mStream.Seek(0, SeekOrigin.Begin); PutObjectResult putObjectResult = ossClient.PutObject(bucketName, key, mStream, metadata); Console.WriteLine(putObjectResult.ETag); } -
Verifikasi bahwa file yang diupload memiliki ukuran yang benar.