加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

azure – Request.Content.ReadAsMultipartAsync引发System.IO异

发布时间:2020-12-16 03:16:29 所属栏目:asp.Net 来源:网络整理
导读:我正在将图像上传到ASP WebAPI服务,然后将其上传到 windows azure.一切都很好但突然间我开始得到以下异常: System.IO.IOException: The process cannot access the file 'C:DWASFilesSitesTasteatTempBodyPart_a5c79910-6077-4c24-b814-10fdc0e0b3d4'
我正在将图像上传到ASP WebAPI服务,然后将其上传到 windows azure.一切都很好但突然间我开始得到以下异常:

System.IO.IOException: The process cannot access the file
        'C:DWASFilesSitesTasteatTempBodyPart_a5c79910-6077-4c24-b814-10fdc0e0b3d4' 
        because it is being used by another process.

这是抛出异常的代码:

var provider = new BlobStorageProvider(container);
    Trace.TraceInformation("Uploading raw image to blob");
    await Request.Content.ReadAsMultipartAsync(provider);
    Trace.TraceInformation("Uploading finished");

我知道它的这一行等待Request.Content.ReadAsMultipartAsync(provider);因为我在日志中看到它前面的行而不是它后面的行.

有任何想法吗?

一切都很好,直到几天

解决方法

因此,我上面发布的代码似乎实际上保存了一个本地文件,然后才将其上传到服务器,这会导致错误,但也很慢.
经过大量的尝试后,我终于改为以下解决方案,一切都开始工作,甚至更快!

首先创建一个streamprovider:

public class BlobStorageMultipartStreamProvider : MultipartStreamProvider
    {
        private readonly string _containerName;
        private readonly string _fileName;

        public BlobStorageMultipartStreamProvider(string containerName,string fileName)
        {
            _containerName = containerName;
            _fileName = fileName;
        }

        public override Stream GetStream(HttpContent parent,HttpContentHeaders headers)
        {
            Stream stream = null;

            if (!String.IsNullOrWhiteSpace(_fileName))
                {
                    string connectionString = ConfigurationManager.ConnectionStrings["BlobStorage"].ConnectionString;
                    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
                    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                    CloudBlobContainer blobContainer = blobClient.GetContainerReference(_containerName);
                    CloudBlockBlob blob = blobContainer.GetBlockBlobReference(_fileName);
                    stream = blob.OpenWrite();
                }
            return stream;
        }
    }

上传代码:

string fileName = Guid.NewGuid()+".Png";
                MultipartStreamProvider provider = new BlobStorageMultipartStreamProvider("container",fileName);
                Trace.TraceInformation("Uploading raw image to blob");                
                await Request.Content.ReadAsMultipartAsync(provider);
                Trace.TraceInformation("Uploading finished");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读