すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:MemoryStream からのゼロバイトアップロードの解決

最終更新日:Apr 25, 2026

問題

.NET SDK を使用して MemoryStream からファイルをアップロードする際、アップロード操作は成功するものの、OSS 上の結果として生成されるファイルのサイズが 0 バイトになる場合があります。この問題は、MemoryStream へのデータ書き込みによってファイルポインターがストリームの末尾に移動してしまうために発生します。

ソリューション

  1. アップロードメソッドにストリームを渡す前に、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);
    }
  2. アップロードされたファイルのサイズが正しいことを確認します。