問題
.NET SDK を使用して MemoryStream からファイルをアップロードする際、アップロード操作は成功するものの、OSS 上の結果として生成されるファイルのサイズが 0 バイトになる場合があります。この問題は、MemoryStream へのデータ書き込みによってファイルポインターがストリームの末尾に移動してしまうために発生します。
ソリューション
-
アップロードメソッドにストリームを渡す前に、
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(); // カスタムメタデータを設定できます。 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); } -
アップロードされたファイルのサイズが正しいことを確認します。