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

4

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

3

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",通过字符串替换我删除引号并得到我需要的结果。 - Iñigo
好的,我会更新答案以匹配它 :) 很高兴你得到了结果。 - Cornel Raiu

1

你可以尝试使用下面的代码替换file.LocalFileName

file.Headers.ContentDisposition.FileName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接