关于处理使用FormData上传到ASP的文件的所有文档/教程/问题.NET WebAPI处理程序使用MultipartFormDataStreamProvider来处理多部分流,将其拆分为相关的表单字段和文件.

var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);

await Request.Content.ReadAsMultipartAsync(provider);

foreach (MultipartFileData file in provider.FileData)
{
   // File
}

但是,在处理过程中,文件会自动写入目录.

当我只需要使用HttpContext.Current.Request.Files[0].InputStream就可以直接在内存中访问给定的文件流时,似乎有很多麻烦.

How can WebAPI just access the file stream directly without the IO overhead of using 100?

官方教程:http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2

推荐答案

解决了的:

使用现有的Simple MultipartMemoryStreamProvider.不需要自定义类或提供程序.这不同于duplicate question,后者通过编写自定义提供程序来解决解决方案.

然后在WebAPI处理程序中使用它,如下所示:

public async Task<IHttpActionResult> UploadFile()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        return StatusCode(HttpStatusCode.UnsupportedMediaType);
    }        
  
    var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
    
    foreach (var stream in filesReadToProvider.Contents)
    {
        var fileBytes = await stream.ReadAsByteArrayAsync();
    }
    return StatusCode(HttpStatusCode.OK);
}

Asp.net相关问答推荐

有人可以解释一下这个Eager 加载示例吗?

WebResource.axd 上的填充无效且无法删除异常

您如何处理多个环境的多个 web.config 文件?

ASP .Net Web API 将图像下载为二进制

在 lambda 表达式中否定 Func

任何人都有解决 Internet Explorer 上剩余 n 项问题的 idea 吗?

EntityFramework 通过 ID 获取对象?

如何判断 IIS 是处于 32 位还是 64 位模式

asp.net cookie、身份验证和会话超时

ASP.NET 日期时间 Select 器

HttpModules 的执行顺序是如何确定的?

ASP.NET RadioButton 与名称(组名)混淆

Windows 运行 ASP.NET 的 IIS 替代方案

您如何以编程方式填写表格并发布网页?

将通用列表绑定到转发器 - ASP.NET

什么是实体框架中的复杂类型以及何时使用它?

*.csproj 中的 usevshostingprocess 是什么?

global.asax 中的 Application_Error 未捕获 WebAPI 中的错误

有没有办法在没有异常类的情况下抛出自定义异常

IE9 JavaScript 错误:SCRIPT5007:无法获取属性ui的值:对象为空或未定义