从C#中的MultipartFileData获取原始文件名

时间:2019-07-17 07:42:35

标签: c# forms file post upload

我有一个上传文件的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

关于如何获得它的任何想法?谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以尝试以下方法代替file.LocalFileName

file.Headers.ContentDisposition.FileName