Java 包含File文件的参数以form-data形式发送post请求

5 篇文章 1 订阅

     urlStr为你要请求的接口地址,textMap是正常的文本参数,fileMap是以文件File类型参数,contentType是文件资源的类型,可以通过查看接口请求头的contentType属性获得。

​
 private String formUpload(String urlStr, Map<String, String> textMap,
                                  Map<String, String> fileMap,String contentType) {
            String res = "";
            HttpURLConnection conn = null;
            // boundary就是request头和上传文件内容的分隔符
            String BOUNDARY = "---------------------------123454634523423";
            try {
                URL url = new URL(urlStr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(30000);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("User-Agent",
                        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36");
                conn.setRequestProperty("Content-Type",
                        "multipart/form-data; boundary=" + BOUNDARY);
                OutputStream out = new DataOutputStream(conn.getOutputStream());
                // text
                if (textMap != null) {
                    StringBuffer strBuf = new StringBuffer();
                    Iterator iter = textMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        strBuf.append("\r\n").append("--").append(BOUNDARY)
                                .append("\r\n");
                        strBuf.append("Content-Disposition: form-data; name=\""
                                + inputName + "\"\r\n\r\n");
                        strBuf.append(inputValue);
                    }
                    out.write(strBuf.toString().getBytes());
                }
                // file
                if (fileMap != null) {
                    Iterator iter = fileMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        File file  = (File) entry.getValue();
                        String filename = file.getName();

                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("\r\n").append("--").append(BOUNDARY)
                                .append("\r\n");
                        strBuf.append("Content-Disposition: form-data; name=\""
                                + inputName + "\"; filename=\"" + filename
                                + "\"\r\n");
                        strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
                        out.write(strBuf.toString().getBytes());
                        DataInputStream in = new DataInputStream(
                                new FileInputStream(file));
                        int bytes = 0;
                        byte[] bufferOut = new byte[1024];
                        while ((bytes = in.read(bufferOut)) != -1) {
                            out.write(bufferOut, 0, bytes);
                        }
                        in.close();
                    }
                }
                byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
                out.write(endData);
                out.flush();
                out.close();
                // 读取返回数据
                StringBuffer strBuf = new StringBuffer();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                   res=line;
                }

                reader.close();
                reader = null;
            } catch (Exception e) {
                System.out.println("发送POST请求出错。" + urlStr);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
            return res;
        }

​

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要以 multipart/form-data 方式的表单 POST 提交 Java 文件参数,你可以使用 Apache HttpClient 库来实现。以下是一个示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.HttpClients; import java.io.File; import java.io.IOException; public class FileUploadExample { public static void main(String[] args) { File file = new File("path/to/file"); // 替换为你要上传的文件路径 HttpClient httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost("http://example.com/upload"); // 替换为你的上传 URL MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 添加文件参数 FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY); builder.addPart("file", fileBody); HttpEntity entity = builder.build(); httppost.setEntity(entity); try { HttpResponse response = httpclient.execute(httppost); // 处理服务器响应 } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们使用了 Apache HttpClient 库来发送 POST 请求。我们创建了一个 `HttpPost` 对象,并设置上传文件的 URL。然后,我们使用 `MultipartEntityBuilder` 来构建 multipart 实体,并通过 `addPart` 方法添加文件参数。最后,我们将 multipart 实体设置到 `HttpPost` 对象中,并使用 `HttpClient` 执行请求。 请注意,你需要将示例代码中的 `http://example.com/upload` 替换为你要上传文件的 URL,将 `path/to/file` 替换为你要上传的文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值