在我的一个.NET应用程序中,我采用的方法是通过 HttpClient 将文件上传到网站。这是实现
using (var clientHandler = new HttpClientHandler
{
CookieContainer = cookieContainer,
UseDefaultCredentials = true
})
{
using (var client = new HttpClient(clientHandler))
{
client.BaseAddress = requestAddress;
client.DefaultRequestHeaders.Accept.Clear();
using (var content = new MultipartFormDataContent())
{
var streamContent = new StreamContent(new MemoryStream(fileData));
streamContent.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse("form-data");
streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("name", "contentFile"));
streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("filename", "\"" + fileName + "\""));
streamContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
content.Add(streamContent);
HttpResponseMessage response = await client.PostAsync("/Files/UploadFile", content);
if (response.IsSuccessStatusCode)
{
return true;
}
return false;
}
}
}
方法工作正常。但是当我在 fileName 属性中传递Cyrillic符号后,请求文件名已经损坏符号,如 ???? 1.docx ,例如?替换西里尔符号。有没有办法在没有腐败的情况下发送西里尔符号?
答案 0 :(得分:0)
我相信filename
在代码页方面的功能非常有限。我猜它只支持ASCII(不是100%肯定)。有一个更好的标题,你可以使用名为filename*
,这有点难以谷歌,因为谷歌将删除*
,你得到所有普通的filename
。
长话短说,你需要使用它:
$"filename*=UTF-8''{fileName}"
你也可能需要对空间等进行一些文件名编码。你可以多点google +查看这个SO post。
P.S。一些较旧的浏览器可能不喜欢它,您需要检查您的要求。