远程调用链接,上传多个文件可携带参数,并获取返回值

直接用java.net的HttpURLConnection 发请求上传多个文件

使用场景:调用写好的接口上传文件,参数类型为file数组时可用

        请求携带参数可根据自己需要更改

package com.xxx;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class FileUploadExample {

    public static void main(String[] args) {
        String targetURL = "#";  //上传的地址
        String charset = "UTF-8";
        File file1 = new File("#"); //文件目录。 使用前端上传的话可以将MultipartFile转为流
        File file2 = new File("cE:/Users/Desktop/#.xlsx");
        double parameter = 666.666; // 携带的参数(可不传)
        try {
            // Create connection
            URL url = new URL(targetURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("accept", "application/json");
            connection.setRequestProperty("Content-Type", "multipart/form-data");

            //connection.setRequestProperty("Token", "xxxxx");
            connection.setDoOutput(true);

            // Create multipart form-data
            String boundary = Long.toHexString(System.currentTimeMillis());
            connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

            try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
                // Upload file 1
                wr.writeBytes("--" + boundary + "\r\n");
                wr.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file1.getName() + "\"\r\n");
                wr.writeBytes("Content-Type: application/pdf\r\n\r\n");
                try (FileInputStream fileInputStream = new FileInputStream(file1)) {
                    byte[] buffer = new byte[4096];
                    int bytesRead;
                    while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                        wr.write(buffer, 0, bytesRead);
                    }
                }
                wr.writeBytes("\r\n");
                // Upload file 2
                wr.writeBytes("--" + boundary + "\r\n");
                wr.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file2.getName() + "\"\r\n");
                wr.writeBytes("Content-Type: application/pdf\r\n\r\n");
                try (FileInputStream fileInputStream = new FileInputStream(file2)) {
                    byte[] buffer = new byte[4096];
                    int bytesRead;
                    while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                        wr.write(buffer, 0, bytesRead);
                    }
                }
                wr.writeBytes("\r\n");
                // Upload parameter
                wr.writeBytes("--" + boundary + "\r\n");
                wr.writeBytes("Content-Disposition: form-data; name=\"parameter\"\r\n\r\n");
                wr.writeBytes(Double.toString(parameter) + "\r\n");
                // End of multipart form-data
                wr.writeBytes("--" + boundary + "--\r\n");
            }

            // Get the response
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                System.out.println(response.toString());
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值