首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在webapi上传中获取分块文件的流?

如何在webapi上传中获取分块文件的流?
EN

Stack Overflow用户
提问于 2014-07-17 22:44:29
回答 2查看 22.3K关注 0票数 5

我需要使用Stream (Azure Blobstorage)上传一个文件,只是找不到如何从对象本身获取流。请参阅下面的代码。

我是WebAPI的新手,我用过一些例子。我正在获取文件和文件数据,但我的方法上传它的类型不正确。因此,我需要获取它或将其转换为normal Stream,这在目前看来有点困难:)

我知道我需要以某种方式使用ReadAsStreamAsync().Result,但是它在foreach循环中崩溃了,因为我得到了两个provider.Contents (第一个似乎正确,第二个不正确)。

代码语言:javascript
运行
复制
 [System.Web.Http.HttpPost]
    public async Task<HttpResponseMessage> Upload()
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
        }

        var provider = GetMultipartProvider();
        var result = await Request.Content.ReadAsMultipartAsync(provider);

        // On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"
        // so this is how you can get the original file name
        var originalFileName = GetDeserializedFileName(result.FileData.First());

        // uploadedFileInfo object will give you some additional stuff like file length,
        // creation time, directory name, a few filesystem methods etc..
        var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);



        // Remove this line as well as GetFormData method if you're not
        // sending any form data with your upload request
        var fileUploadObj = GetFormData<UploadDataModel>(result);

        Stream filestream = null;

        using (Stream stream = new MemoryStream())
        {
            foreach (HttpContent content in provider.Contents)
            {
                BinaryFormatter bFormatter = new BinaryFormatter();
                bFormatter.Serialize(stream, content.ReadAsStreamAsync().Result);
                stream.Position = 0;
                filestream = stream;
            }
        }

        var storage = new StorageServices();
        storage.UploadBlob(filestream, originalFileName);**strong text**



private MultipartFormDataStreamProvider GetMultipartProvider()
    {
        var uploadFolder = "~/App_Data/Tmp/FileUploads"; // you could put this to web.config
        var root = HttpContext.Current.Server.MapPath(uploadFolder);
        Directory.CreateDirectory(root);
        return new MultipartFormDataStreamProvider(root);
    }
EN

Stack Overflow用户

回答已采纳

发布于 2014-07-18 18:13:41

这与我几个月前遇到的一个难题完全相同(在MultipartStreamProvider接管之前捕获上传流,并自动神奇地将流保存到文件中)。我们的建议是继承该类并覆盖方法...但这在我的情况下不起作用。:( (我希望将MultipartFileStreamProviderMultipartFormDataStreamProvider的功能合并到一个MultipartStreamProvider中,而不是自动保存部分)。

这可能会有所帮助;来自同一个开发人员的here's one written by one of the Web API developersthis

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24806664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档