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

2024-02-05

我在用着HttpClient发布MultipartFormDataContent到 Java Web 应用程序。我上传几个StringContents和一个我添加为StreamContent using MultipartFormDataContent.Add(HttpContent content, String name, String fileName)使用该方法HttpClient.PostAsync(String, HttpContent).

这工作正常,除非我提供fileName包含德语变音符号(我还没有测试其他非 ASCII 字符)。在这种情况下,fileName正在进行 base64 编码。名为的文件的结果99 2 LD 353 温度 äüöß-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);

这适用于西班牙口音。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 HttpClient/MultipartFormDataContent 中禁用 base64 编码的文件名 的相关文章

随机推荐