我的Content-Disposition
中的文件名存在mime / quoted-printable编码问题,但HttpContext.Current.Request.Files
没有解码该值,而是我得到'filenames',如:
=?UTF-8 2 B 4 Zm9vIOKAkyBiYXIubXNn?=
应该说“foo - bar.msg”
Wirehark捕获的Content-Disposition是:
形式数据;名称= \ “文件\”;文件名= \ “????= UTF-8乙Zm9vIOKAkyBiYXIubXNn = \”
我的客户代码:
string address = "http://localhost/test";
string filename = "foo – bar.msg";
Stream stream = File.Open(filename, FileMode.Open);
using (HttpClient client = new HttpClient())
{
// Create a stream content for the file
using (MultipartFormDataContent content = new MultipartFormDataContent())
{
var fileContent = new StreamContent(stream);
fileContent.Headers.ContentDisposition =
new ContentDispositionHeaderValue("form-data")
{
Name = "\"file\"",
FileName = filename
};
fileContent.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
content.Add(fileContent);
Uri requestAddress = new Uri(address);
// Post the MIME multipart form data upload with the file
HttpResponseMessage response =
client.PostAsync(requestAddress, content).Result;
}
}
我的服务器代码
public void Post()
{
// this line results in filename being set to the encoded value
string filename = HttpContext.Current.Request.Files[0].FileName;
}
有没有办法让HttpFileCollection
解码值?或者更有可能的是,有没有办法阻止我的客户端代码对值进行双重编码?
因为内容处置位于多部分边界部分,所以我不能使用Request.Content.Headers.ContentDisposition
,因为它是null
?有没有办法从多部分表单数据请求的主体中获取ContentDispositionHeaderValue
的实例?
答案 0 :(得分:0)
当我尝试从带有特殊字符的文件中获取FileName时遇到同样的问题,在我的情况下使用重音符号。
我的解决方案是在服务器端:
Convert.FromBase64String
获得一个字节[]-> var myBytes = Convert.FromBase64String("Zm9vIOKAkyBiYXIubXNn");
string utf8String = Encoding.UTF8.GetString(myBytes);
,您将获得原始文件名PD:
Esto sirve para obtener
httpPostedFile.FileName
de archivos con nombre con carereres especiales o acentos。
致谢!