如何在webapi上传中获取多部分文件的流?

2024-03-04

我需要使用流(Azure Blob 存储)上传文件,但无法找到如何从对象本身获取流。请参阅下面的代码。

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

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

 [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);
    }

这与我几个月前遇到的困境相同(在MultipartStreamProvider接管并自动神奇地将流保存到文件中)。建议是继承该类并重写方法......但这对我来说不起作用。 :((我想要这两个功能MultipartFileStreamProvider and MultipartFormDataStreamProvider卷入一个 MultipartStreamProvider,没有自动保存部分)。

这可能会有所帮助;这是一位 Web API 开发人员编写的一篇文章 https://stackoverflow.com/a/17073113/501556, and this https://stackoverflow.com/a/15843410/501556来自同一开发商。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在webapi上传中获取多部分文件的流? 的相关文章

随机推荐

  • Javafx连接多个StringProperty

    有没有一种简单的方法来绑定 StringProperty 对象的串联 这是我想做的 TextField t1 new TextField TextField t2 new TextField StringProperty s1 new Si
  • R 中更快的模数或相等检查(或矢量化的好方法)

    我一直在运行欧拉项目 试图编写计算效率高的程序 考虑问题1 http projecteuler net problem 1 http projecteuler net problem 1 我将范围从 1000 提高到 10 000 000
  • 如何搜索按字母顺序排列的六个字母的单词

    我最近创建了一个 Perl 脚本 使用以下代码搜索以 D 和 E 开头的单词 infile words txt open IN infile count 0 while word
  • 如何使用带有专有java后端文档系统的MS Office

    目前我有一个文档系统 可以在 iframe 中启动 Star Office 或 LibreOffice 中的文档 展望未来 我理想地希望保留现有的文档系统 但将其集成到 SharePoint 中 以便我们能够使用 MS Office 打开和
  • Android - 从通知中删除操作按钮

    我想在单击这些操作按钮时关闭通知操作按钮 而不是整个通知 比方说 带有停止操作按钮的下载通知 单击停止时 关闭停止按钮并将 contentText 更改为 下载已取消 我唯一想到的是取消通知并通知具有相同 id 的另一个通知 但这似乎是一个
  • 链接器错误“包含无效的 OMF 记录”2

    我正在使用 Embarcadero XE8 C 构建器 32 位 我正在向我的程序添加一个库来解决Unresolved external error 当我添加库时 出现如标题所示的错误 于是我上网搜索了一下 在stackoverflow上找
  • C++ 类作为 Objective-C 类的实例变量

    我需要混合 Objective C 和 C 我想将所有 C 内容隐藏在一个类中 而将所有其他内容保留为纯 Objective C 问题是我想要一些 C 类作为实例变量 这意味着它们必须在头文件中提及 头文件会被其他类包含 并且 C 开始传播
  • 为什么从实例获取类属性会引发 AttributeError?

    通常 您可以从该类的实例访问常规类属性 字段 然而 当尝试访问一个类时property 会引发 AttributeError 为什么实例看不到类对象的属性 class Meta type property def cls prop cls
  • 扭曲的 dns 不起作用

    我想知道为什么以下不起作用 from twisted internet import defer reactor from twisted python failure import Failure import twisted names
  • 有没有类似于 LinkedIn Engineering 发布的案例研究?

    LinkedIN Engineering 发布了一系列关于他们在开发 iPad 混合移动应用程序时的经验和发现的精彩案例研究 http engineering linkedin com mobile linkedin ipad native
  • RegisterHotKey 不适用于不可见表单 (c#)

    我试图在系统托盘中放置一个图标 然后为其提供一个全局键盘快捷键来执行某项功能 我使用 RegisterHotKey 设置全局键盘快捷键 如果与图标关联的主窗体可见 则它可以工作 但如果窗体不可见 则永远不会调用 WndProc 方法 有任何
  • 谁分享了我的 Facebook 帖子?

    使用任何适用于 Python 的 Facebook API 我试图获取分享我的帖子的人数以及这些人是谁 我目前有第一部分 gt gt gt from facepy import gt gt gt graph GraphAPI CAAEr g
  • monodevelop 3 - 支持“附加到进程”

    MonoDevelop 3 支持附加到进程吗 如果是这样 有人可以指出它在哪里或任何可能的解决方法 简短的回答是 不 据我所知不是 但是 如果您希望在不从 MonoDevelop 启动项目的情况下进行调试 则可以选择使用此处描述的软调试器
  • 将 xtext 编辑器支持与外部 ANTLR 解析器链接起来

    我当前的项目 将其命名为 IoTSuite 采用高级规范 解析它们 并生成 Java 和 Android 代码 在这个项目中 我编写了 ANTLR 语法来解析高级规范 并使用 StringTemplate 作为代码生成器 然而 由于良好的编
  • 使用自定义 Maven 插件“无法设置 org.eclipse.aether.spi.log.Logger”

    我写了一个小的自定义 Maven 插件 它运行良好 大多数时候 使用它时 它被配置为在测试阶段运行 并且我看到它正在执行 没有问题 现在问题来了 当我这样做时mvn 干净安装 or mvn 干净部署在使用该插件的项目中 它失败并显示一条我无
  • 加密 AES/CBC/PKCS7Padding

    帮我加密一下AES CBC PKCS7Padding 下面是我的解密代码AES CBC PKCS7 它正在工作 但是当我加密一些字符串并从我自己解密时 这是错误的 下面我添加代码来加密和解密 AES CBC PKCS7Padding NSD
  • 在 ZF2 控制器中获取请求授权标头

    我正在使用 ZF2 出于某种原因 我可以获取我发送的所有标头 授权标头除外 就像它被过滤掉一样 我试图获取控制器中的所有标头 如下所示 public function createAction data request this gt re
  • SSAS Cube 处理日志

    SSAS立方体在哪里加工 不是错误 不是飞行记录器 日志存储了吗 我们有一个运行 SQL Server Analysis Services 命令的 SQL 代理作业 其中有一些 DMX 处理每个维度 然后处理多维数据集数据库 包含两个多维数
  • 通过 testcafe-browser-tools 将自定义参数传递到 Chrome 二进制文件时,无头运行 testcafe

    在 Vagrant VM 中运行 testcafe 即mostly在职的 但是 Chrome 在启用硬件加速的环境中无法正常启动 因此我必须使用命令行标志来启动它 disable gpu 我利用 testcafe browser tools
  • 如何在webapi上传中获取多部分文件的流?

    我需要使用流 Azure Blob 存储 上传文件 但无法找到如何从对象本身获取流 请参阅下面的代码 我是 WebAPI 的新手 并且使用过一些示例 我正在获取文件和文件数据 但对于我的上传方法来说 它的类型不正确 因此 我需要将其获取或转