java后端调用post请求formdata,参数带文件解决文件名是中文乱码问题

方法一

public static void toPostFile(String url){
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        // 设置请求头 boundary边界不可重复,重复会导致提交失败
        String boundary = "-------------------------" + UUID.randomUUID().toString();
        // 构建请求体,添加文件和form data参数
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        // 设置字符编码
        builder.setCharset(StandardCharsets.UTF_8);
        // 模拟浏览器
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // 设置边界
        builder.setBoundary(boundary);
        // 设置multipart/form-data流文件
//        builder.addPart("sendfile", new FileBody(file));
        builder.addBinaryBody("file", new File("C:\\Users\\1\\Desktop\\新建文本文档.txt")); // 添加文件
        builder.addTextBody("userId", "123"); // 添加form data参数
        HttpEntity multipart = builder.build();
        httpPost.setEntity(multipart);

        try {
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity responseEntity = response.getEntity();
            String responseBody = EntityUtils.toString(responseEntity);

            // 处理响应结果
            System.out.println(responseBody);
            // 关闭连接
            httpClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

方法二

public static void sendMultipartRequestdd(String url) throws IOException {
        // 创建XWPFDocument
        XWPFDocument document = new XWPFDocument();
        // 添加一些内容到文档
        document.createParagraph().createRun().setText("Hello, POI!");

        // 将XWPFDocument保存到ByteArrayOutputStream
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        document.write(byteArrayOutputStream);
        document.close();

        // 创建HttpClient和HttpPost
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);

        // 设置请求头 boundary边界不可重复,重复会导致提交失败
        String boundary = "-------------------------" + UUID.randomUUID().toString();
        httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
        // 创建MultipartEntityBuilder,并添加文本和文件
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        // 设置字符编码
        builder.setCharset(StandardCharsets.UTF_8);
        // 模拟浏览器
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // 设置边界
        builder.setBoundary(boundary);
        // 设置multipart/form-data流文件
//        builder.addPart("sendfile", new FileBody(file));

        builder.addBinaryBody("file", byteArrayOutputStream.toByteArray(), ContentType.create("application/vnd.openxmlformats-officedocument.wordprocessingml.document"), "陈诞.docx");

        // 设置请求实体
        httpPost.setEntity(builder.build());

        // 执行请求并获取响应
        try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
            // 打印响应内容
            String responseString = EntityUtils.toString(response.getEntity());
            System.out.println(responseString);
        }
    }

关键地方,设置这几个即可解决乱码问题

       // 设置字符编码
        builder.setCharset(StandardCharsets.UTF_8);
        // 模拟浏览器
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // 设置边界
        builder.setBoundary(boundary);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值