如何在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上传中获取多部分文件的流? 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 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 的新手 并且使用过一些示例 我正在获取文件和文件数据 但对于我的上传方法来说 它的类型不正确 因此 我需要将其获取或转