Str*_*z0r 6 c# base64 dotnet-httpclient
我正在使用HttpClientPOST MultipartFormDataContent到Java Web应用程序.我正在上传几个StringContents和一个文件,我使用该方法添加为StreamContent使用.MultipartFormDataContent.Add(HttpContent content, String name, String fileName)HttpClient.PostAsync(String, HttpContent)
这工作正常,除非我提供包含德语变音符号的fileName(我还没有测试过其他非ASCII字符).在这种情况下,fileName正在进行base64编码.名为99 2 LD 353TempÄüöß-1.txt的文件的结果
看起来像这样:
__utf-8_B_VGVtcCDvv73vv73vv73vv71cOTkgMiBMRCAzNTMgVGVtcCDvv73vv73vv73vv70tMS50eHQ___
Run Code Online (Sandbox Code Playgroud)
Java服务器在其UI中显示此编码文件名,这会使用户感到困惑.我无法进行任何服务器端更改.
如何禁用此行为?任何帮助将受到高度赞赏.
提前致谢!
小智 9
我刚刚发现了与StrezzOr相同的限制,因为我使用的服务器不尊重文件名*标准.
我将文件名转换为UTF-8表示的字节数组,并将字节重新设置为"简单"字符串(非UTF-8)的字符.
此代码创建内容流并将其添加到多部分内容:
FileStream fs = File.OpenRead(_fullPath);
StreamContent streamContent = new StreamContent(fs);
streamContent.Headers.Add("Content-Type", "application/octet-stream");
String headerValue = "form-data; name=\"Filedata\"; filename=\"" + _Filename + "\"";
byte[] bytes = Encoding.UTF8.GetBytes(headerValue);
headerValue="";
foreach (byte b in bytes)
{
headerValue += (Char)b;
}
streamContent.Headers.Add("Content-Disposition", headerValue);
multipart.Add(streamContent, "Filedata", _Filename);
Run Code Online (Sandbox Code Playgroud)
这与西班牙口音一起使用.
希望这可以帮助.
我最终放弃并使用HttpWebRequest而不是解决了该任务HttpClient。我必须手动构建标头和内容,但这使我可以忽略发送非 ASCII 文件名的标准。我最终将未编码的 UTF-8 文件名塞进filename标头中,这是服务器接受我的请求的唯一方式。