使用.NET SDK通过MemoryStream方法上传文件到OSS时大小为空的解决方法

更新时间:
复制为 MD 格式

问题描述

在使用.NET SDK通过MemoryStream方法上传文件时,由于MemoryStream默认文件指针的当前位置是流的尾部,文件可以上传成功,但是文件的大小为0。

解决方案

  1. 在上传文件之前使用mStream.Seek(0, SeekOrigin.Begin);让文件指针归零,代码示例如下所示。

    public static void MemStreamUpload()
    {
        Uri endPoint = new Uri("http://oss-cn-beijing.aliyuncs.com");
        string accessKeyID = xxx;
        string accessKeySecret = xxx;
        string bucketName = "youkou";
        string key = "ossobject.jpg";
        string filepath = @"D:\1.jpg";
    
        ObjectMetadata metadata = new ObjectMetadata();
        // 可以设定自定义的metadata
        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. 确认通过MemoryStream方法上传文件时,可以显示文件大小。