gpt4 book ai didi

c# - 如何在 HttpClient/MultipartFormDataContent 中禁用 base64 编码的文件名

转载 作者:太空狗 更新时间:2023-10-29 22:19:03 26 4
gpt4 key购买 nike

我正在使用 HttpClientMultipartFormDataContent 发布到 Java 网络应用程序。我正在上传几个 StringContents 和一个文件,我使用 MultipartFormDataContent.Add(HttpContent content, String name, String fileName) 添加为 StreamContent使用方法 HttpClient.PostAsync(String, HttpContent)

这工作正常,除非我提供包含德语变音符号的 fileName(我还没有测试其他非 ASCII 字符)。在这种情况下,fileName 正在使用 base64 编码。名为 99 2 LD 353 Temp Äüöß-1.txt

的文件的结果

看起来像这样:

 __utf-8_B_VGVtcCDvv73vv73vv73vv71cOTkgMiBMRCAzNTMgVGVtcCDvv73vv73vv73vv70tMS50eHQ___

Java 服务器在其 UI 中显示此编码文件名,这会使用户感到困惑。我无法进行任何服务器端更改。

如何禁用此行为?任何帮助将不胜感激。

提前致谢!

最佳答案

我刚刚发现了与 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);

这是在处理西类牙口音。

希望这对您有所帮助。

关于c# - 如何在 HttpClient/MultipartFormDataContent 中禁用 base64 编码的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com