其他测试框架 rest-assured 上传文件,中文文件名乱码的问题解决

树叶 · 2022年07月29日 · 最后由 Jerry li 回复于 2022年08月05日 · 7029 次阅读

最近在用 rest-assured 测接口,比 httpClient 好用太多,但是在上传 文件名包含中文的时候,文件名发到后端是乱码,折腾了我大半天

我讲解一个问题,不会从计算机的起源开始叨逼叨半天废话一大堆

我只是负责解决问题,如果解决不了工作中的问题,
天天研究底层,研究 List 的迭代有 4 种写法,研究使用 lambda 可以让你少写几个字母也没啥卵用

技术只是一种解决问题的工具而已

为团队赋能,直接上代码,用下面的代码就可以决绝 上传文件名中包含中文的乱码问题:

package forBugs;

import io.restassured.config.HttpClientConfig;
import io.restassured.config.RestAssuredConfig;
import org.testng.annotations.Test;

import java.io.File;

import static io.restassured.RestAssured.given;
import static io.restassured.config.MultiPartConfig.multiPartConfig;
import static org.apache.http.entity.mime.HttpMultipartMode.BROWSER_COMPATIBLE;

public class C {
    @Test
    public void main() {
        String s = given().config(RestAssuredConfig.config()
                        .httpClient(HttpClientConfig.httpClientConfig().httpMultipartMode(BROWSER_COMPATIBLE))
                        .multiPartConfig(multiPartConfig().defaultCharset("UTF-8")))
                .multiPart(new File("C:\\temp\\1394356510\\希尔顿.json"))
                .header("Cookie", "JSESSIONID=1233")
                .param("type", "json")
                .when()
                .post("http://alipay.com/upload")
                .then()
                .extract()
                .response().asString();

        System.out.println(s);

    }
}

<dependency>
           <groupId>io.rest-assured</groupId>
           <artifactId>rest-assured</artifactId>
           <version>4.3.3</version>
       </dependency>

就这样

最佳回复
树叶 回复

这也不算很底层吧,只是确定下原因,便于后续遇到类似情况后解决而已。

如果不是定位到原因后解决问题,而是随便改,改完发现生效后就当解决问题,容易导致一些副作用而不自知,也不利于系统地积累知识。

共收到 5 条回复 时间 点赞

原因确定了吗? 是编码的问题还是其他?
建议还是把原因,解决方案说明清楚,对自己后续回顾或者别人参考都有帮助;至于代码,有时候只需要把最关键的那行贴出来就可以了。
比如我猜是设置成 utf-8 那段起效果了。那么如果不设置的话,默认的编码是什么?更改了这个默认配置,对其他有没有影响?能不能解决其他常见的文件或路径的异常情况,比如目录名称有中文或者目录里面有空格?

Jerry li 回复

说的很有道理,但是我没有时间去研究底层逻辑,能解决当前问题就好 😂

树叶 回复

这也不算很底层吧,只是确定下原因,便于后续遇到类似情况后解决而已。

如果不是定位到原因后解决问题,而是随便改,改完发现生效后就当解决问题,容易导致一些副作用而不自知,也不利于系统地积累知识。

不知道你平时有注意到,在浏览器中打开中文文件名的链接时,地址栏里显示的不是中文名,而是很多百分号,所以是不是要把中文字符转成 Unicode?

树叶 回复

正如 恒捷所说,这个算不上底层了。
这种场景就好像改 bug 一样,如果开发连 root cause 都没有找出来,然后改了一下代码发现能跑通了,你也不放心说把你的 bug 直接关掉吧?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册