【问题标题】:Get original filename from MultipartFileData in c#从 C# 中的 MultipartFileData 获取原始文件名
【发布时间】:2019-11-25 23:51:05
【问题描述】:

我有一个文件上传的 POST 请求,其正文与此类似:

-----------------------------88481896131794
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

Content
-----------------------------88481896131794
Content-Disposition: form-data; name="text"

asdf
-----------------------------88481896131794
Content-Disposition: form-data; name="email"

asdf@gmail.com

在 Visual Studio 2015 上,我这样处理请求:

string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);

我使用以下代码获取文件名:

foreach (MultipartFileData file in provider.FileData)
{
   fi.name = Path.GetFileName(file.LocalFileName);
}

通过这种方法,我得到了一个完全不同的名字BodyPart_408513e3-60d8-42f5-bdf3-8df9742f833f,而我需要的是原来的名字test.txt

知道如何获得它吗?谢谢。

【问题讨论】:

    标签: c# forms file post upload


    【解决方案1】:

    你可以试试下面的而不是file.LocalFileName

    file.Headers.ContentDisposition.FileName
    

    【讨论】:

      【解决方案2】:

      file.LocalFileName 获取保存来自 POST 请求的数据时生成的本地文件。要提取通过 POST 发送的文件的实际文件名,您必须使用:file.Headers.ContentDisposition.FileName

      foreach (MultipartFileData file in provider.FileData)
      {
         fi.name = Path.GetFileName(file.Headers.ContentDisposition.FileName);
      }
      

      【讨论】:

      • 我得到一个 ArgumentException !如果我只使用 file.Headers.ContentDisposition.FileName 我得到“test.txt”,并用字符串替换我删除引号得到我需要的结果。
      • 酷。我会更新答案以匹配:) 很高兴你有结果
      猜你喜欢
      • 2015-12-17
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多