Java HttpURLConnection 使用

/**

*

*/

package com.demo.java;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLConnection;

import java.util.List;

import java.util.Map;

/**

*

描述:

*

* @author saohuo

* @date 2019年11月4日

* @version

*/

public class MultipartFormDataPost {

// multipart/form-data; 表单各字段提交分隔符

private static String boundary = "--69695201314";

public void submit(Map generalField, List files) throws Exception {

HttpURLConnection connection = null;

OutputStream os = null;

URL url = new URL("http:");

connection = (HttpURLConnection) url.openConnection();

connection.setDoInput(true);

connection.setDoOutput(true);

connection.setRequestMethod("POST");

connection.setUseCaches(false);

connection.setRequestProperty("Connection", "Keep-Alive");

connection.setRequestProperty("Accept-Charset", "UTF-8");

connection.setRequestProperty("content-type", "multipart/form-data;boundary="+boundary);

os = new DataOutputStream(connection.getOutputStream());

// 文本参数组装

StringBuffer textFormBody = new StringBuffer();

Map formField = generalField;

formField.forEach((k,v) -> {

textFormBody.append("\r\n").append("--").append(boundary).append("\r\n");

textFormBody.append("Content-Disposition: form-data; name=\""+k+"\"");

textFormBody.append("\r\n\r\n");//名称与数据之间要有两个回车换行

textFormBody.append(v);

});

// 提交文本表单

os.write(textFormBody.toString().getBytes("UTF-8"));

// 文件数据

if (files != null && !files.isEmpty()) {

int fileIndex = 0;

for(File file : files) {

String filename = file.getName();

String fileMinetype = URLConnection.getFileNameMap().getContentTypeFor(filename);

StringBuffer fileFormBody = new StringBuffer();

fileFormBody.append("\r\n").append("--").append(boundary).append("\r\n");

fileFormBody.append("Content-Disposition: form-data; name=\"files["+fileIndex+"]\"; filename=\"" + filename + "\"");

fileFormBody.append("\r\n");

fileFormBody.append("Content-Type:" + fileMinetype);

fileFormBody.append("\r\n\r\n");

// 提交文件基本信息(文件名、文件长度、文件类型等)

os.write(fileFormBody.toString().getBytes());

InputStream fileStream = new FileInputStream(file);

DataInputStream fileDataIs = new DataInputStream(fileStream);

int filebytes = 0;

byte[] filebufferOut = new byte[1024];

while ((filebytes = fileDataIs.read(filebufferOut)) != -1) {

os.write(filebufferOut, 0, filebytes);

}

fileDataIs.close();

fileIndex++;

}

} // 文件写入结束

// 最后写入结束标识

byte[] endBodyData = ("\r\n--" + boundary + "--\r\n").getBytes();

os.write(endBodyData);

os.flush();

int responseCode = connection.getResponseCode();

// 提交结果状态码

System.out.println(responseCode);

}

}

java 接口表单提交_Java http 调用接口提交表单以及文件相关推荐

  1. java爬虫隐藏表单提交_java爬虫--jsoup简单的表单抓取案例

    分析需求: 某农产品网站的农产品价格抓取 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. 软件环境:eclips ...

  2. jquery表单ajax json数据,jquery序列化form表单使用ajax提交后处理返回的json数据

    1.返回json字符串: /** 将一个字符串输出到浏览器 */ protected void writeJson(String json) { PrintWriter pw = null; try ...

  3. servlet html js提交表单,使用jquery.form.js实现form表单无刷新提交简单示例

    直到今天,才发现JQuery原来有个Form表单插件,而且还是无刷新页面提交表单,看来自己还要多加强学习啊!不多说了,直接贴代码吧,代码比较简单! Servlet代码: package com.pro ...

  4. JS--JavaScript提交表单(submit事件)、重置表单、取消默认提交表单(单击按钮、回车)

    提交表单 使用< input > 或 < button >标签都可以定义提交按钮,只要将type属性值设置为"submit"即可,而图像按钮则是通过将 &l ...

  5. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)

    jmeter测试接口--form表单提交请求(解决请求传参为空的问题) 参考文章: (1)jmeter测试接口--form表单提交请求(解决请求传参为空的问题) (2)https://www.cnbl ...

  6. ele-ui表单验证,异步调用接口判断是否重名

    背景 ele-ui使用表单验证,需要调用接口判断是否是重名,重名则停留在当前页,否则就进行到下一页. 存在问题 使用普通的validate rules: {name: [{ required: tru ...

  7. android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现

    孙俊英 陈忠超 摘 要:基于ArcGIS for Android的采集系统作为当下主要的野外采样方式之一,被广泛的应用于各类场景,针对不同采集内容,采集系统的主要差异在于采样的属性数据所有不同,使用传 ...

  8. angularjs 表单校验指令_angular4.0的模板式表单、响应式表单及其错误提示

    模板式表单 NgForm.NgModel.NgModelGroup是FormModule里的内容,NgForm会自动拦截标准的表单处理事件(eg.提交),angular用ngSubmit代替标准的表单 ...

  9. html中表单元素中的单选框,Html表单元素及表单元素详解

    大纲 1.认识表单 2.认识表单元素 3.表单元素的分类 4.表单元素--文本框 5.表单元素button 6.表单元素--单选.多选 7.表单元素--select 8.表单元素--textarea ...

最新文章

  1. 卷积:kernel size/padding/stride
  2. 长寿即服务:创业公司如何用AI技术颠覆传统药物研发
  3. android 随意漂浮动画,Android实现气泡漂浮动画,类似IOS Game Center中气泡动画
  4. display属性_前端基础:Grid 布局教程,重新复习grid布局的容器和项目属性
  5. mysql语法与decode语法的不同
  6. java获取文件夹 路径,Java获取文件的路径
  7. Windows Phone 8.1 开发实例 网络编程 天气预报
  8. 使用Java实现面向对象编程(1)
  9. 三菱st语言编程实例_C语言编程实例39
  10. Android-7.0-Nuplayer概述
  11. ios html5 苹方字体,iOS中使用自定义字体-苹方字体
  12. NI-9253 C系列电流输入模块-9253
  13. ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
  14. openbsd系统可以做什么服务器,OpenBSD 3.8 release 架设FTP服务器
  15. 涂涂乐的详细实现之一--画笔核心功能
  16. 云基础设施自研,阿里云腾讯云华为云亮出啥高招?
  17. 调用高德地图Api实现通过地址转经纬度
  18. SQL语句-各种查询
  19. 如何激励你的内容团队产出更好的创意
  20. 解决笔记本光标乱移动问题

热门文章

  1. background-size 兼容ie8以下浏览器的方法
  2. ubuntu zip解压
  3. asp.net网站编码测试
  4. 【剑指offer】面试题22:链表中倒数第 K 个节点
  5. java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;
  6. python中scale_Python中的Log-scale mathplotlib?
  7. 电脑fps低怎么办_电脑想要英雄联盟玩的流畅,主要看哪几个方面?
  8. C++对字符串每个字母按照字典顺序排序
  9. python 绘制功率谱密度图 plt.psd
  10. cocos2dx实现象棋之运动