【问题标题】:Read Multipart/Form-Data without touching disk在不接触磁盘的情况下读取 Multipart/Form-Data
【发布时间】:2016-02-28 04:07:51
【问题描述】:

好的,所以我想在我的 WebAPI 中接收 Multipart/Form-Data POST 请求,并对其中包含的文件和表单字段进行处理。这很简单,就像这样:

var provider = new MultipartFormDataStreamProvider(Path.GetTempPath());

await Request.Content.ReadAsMultipartAsync(provider);

var formValue = provider.FormData["form_value_here"];

var files = provider.FileData.Select(d => d.LocalFileName);

很容易获得我需要的任何表单域或特定文件。但是,我希望有类似的功能,但不是在调用 ReadAsMultipartAsync 时将文件保存到磁盘,而是希望将它们放在 Stream

这样做的原因是,我想在将文件保存到磁盘之前对正在发布的文件的值进行哈希处理,并在必要时拒绝请求。是否有我错过的内置提供程序或类具有方便的 API?

【问题讨论】:

    标签: c# asp.net-web-api multipartform-data


    【解决方案1】:

    您可以使用 MultipartMemoryStreamProvider 将表单数据作为流获取。你会想要这样的东西:

    if (!Request.Content.IsMimeMultipartContent())
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    
    var provider = new MultipartMemoryStreamProvider();
    await Request.Content.ReadAsMultipartAsync(provider);
    var fileNames = new List<string>();
    foreach (var file in provider.Contents)
    {
        fileNames.Add(file.Headers.ContentDisposition.FileName.Trim('\"'));
        var buffer = await file.ReadAsByteArrayAsync();
        //hash values, reject request if needed
    }
    
    return Ok();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多