首页 > 解决方案 > 从 C# 中的 MultipartFileData 获取原始文件名

问题描述

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

解决方案


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

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

推荐阅读