java模拟http请求,同时上传多个文件和参数(客户端)_qq_25958999的博客-程序员宅基地_同http请求一起发送的文件添加设置

package com.acconsys.base.util;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class HttpRequester {
    private static final String BOUNDARY = "-------45962402127348";
    private static final String FILE_ENCTYPE = "multipart/form-data";
public static void main(String[] args) {
	String filepath = "D:\\360安全浏览器下载\\plsqldev_2990.zip";
	String urlStr = "http://localhost:8080/chsService/FileUploadServlet";
	Map<String, String> textMap = new HashMap<String, String>();
	textMap.put("hahaha", "Capital-DocGen.zip");
	textMap.put("aaa", "D:\\server.zip");
	textMap.put("bbbb", "<?xml version='1.0' encoding='utf-8'?><root><parts><part number='设计Name' name='设计ShortDescription'  projectName='项目名'  version='设计版本' owner='设计创建人' type='设计类型' domain='所属域Name' status='设计状态'></part><part number='设计Name' name='设计ShortDescription'  projectName='项目名'  version='设计版本' owner='设计创建人' type='设计类型' domain='所属域Name' status='设计状态'></part><part number='设计Name' name='设计ShortDescription'  projectName='项目名'  version='设计版本' owner='设计创建人' type='设计类型' domain='所属域Name' status='设计状态'></part></parts></root>");
	Map<String, File> fileMap = new HashMap<String, File>();
	fileMap.put("myFile.zip", new File(filepath));
	post(urlStr, textMap, fileMap);

}
/**
 * 
 * @param urlStr http请求路径
 * @param params 请求参数
 * @param images 上传文件
 * @return
 */
    public static InputStream post(String urlStr, Map<String, String> params,
            Map<String, File> images) {
        InputStream is = null;
        
        try {
            URL url = new URL(urlStr);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();

            con.setConnectTimeout(5000);
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setUseCaches(false);
            con.setRequestMethod("POST");
            con.setRequestProperty("Connection", "Keep-Alive");
            con.setRequestProperty("Charset", "UTF-8");
            con.setRequestProperty("Content-Type", FILE_ENCTYPE + "; boundary="
                    + BOUNDARY);
            
            StringBuilder sb = null;
            DataOutputStream dos = new DataOutputStream(con.getOutputStream());;
            if (params != null) {
                sb = new StringBuilder();
                for (String s : params.keySet()) {
                    sb.append("--");
                    sb.append(BOUNDARY);
                    sb.append("\r\n");
                    sb.append("Content-Disposition: form-data; name=\"");
                    sb.append(s);
                    sb.append("\"\r\n\r\n");
                    sb.append(params.get(s));
                    sb.append("\r\n");
                }
    
                dos.write(sb.toString().getBytes());
            }

            if (images != null) {
                for (String s : images.keySet()) {
                    File f = images.get(s);
                    sb = new StringBuilder();
                    sb.append("--");
                    sb.append(BOUNDARY);
                    sb.append("\r\n");
                    sb.append("Content-Disposition: form-data; name=\"");
                    sb.append(s);
                    sb.append("\"; filename=\"");
                    sb.append(f.getName());
                    sb.append("\"\r\n");
                    sb.append("Content-Type: application/zip");//这里注意!如果上传的不是图片,要在这里改文件格式,比如txt文件,这里应该是text/plain
                    sb.append("\r\n\r\n");
                    dos.write(sb.toString().getBytes());
    
                    FileInputStream fis = new FileInputStream(f);
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) != -1) {
                        dos.write(buffer, 0, len);
                    }
                    dos.write("\r\n".getBytes());
                    fis.close();
                }
    
                sb = new StringBuilder();
                sb.append("--");
                sb.append(BOUNDARY);
                sb.append("--\r\n");
                dos.write(sb.toString().getBytes());
            }
            dos.flush();

            if (con.getResponseCode() == 200)
                is = con.getInputStream();
            
            dos.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25958999/article/details/83988974

智能推荐

PAL制式和NTSC制式的定义及区别_qiuchangyong的博客-程序员宅基地

原文地址 http://www.52video.net/art_view5402.html    大部分的AV玩家都知道NTSC(美国国家电视系统委员会)代表了一种目前世界上广为采用的电视系统标准,事实上,NTSC是由EIA(美国电子工业协会)所发起及创办的。NTSC也曾经订定了单色(黑白)电视标准,并且于1941年经FCC(美国联邦通信委员会)通过并认可了这个标准。其实在1949年左右,

maven打war包和jar包的方式(项目本身与依赖的jar包合并或者分离两种方式)_乐之者java的博客-程序员宅基地_maven war 依赖分离

maven怎么打war包一个童鞋问我maven怎么打war包,一听有点懵,懵的不是maven到底该怎么打war包,我不会?而是觉得maven打war包需要配置吗,也许只有最简单的才是最适合的。maven配置文件pom.xml的基本结构:&lt;projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http...

从epoll构建muduo-3 加入第一个类,顺便介绍reactor_voidccc的博客-程序员宅基地

mini-muduo v 0.02版本,这个版本添加的内容非常少,完整可运行的示例可从github下载,使用命令git checkout v0.02可切换到此版本,在线浏览到这里#include "TcpServer.h"int main(int args, char** argv){ TcpServer tcpserver; tcpserver.start();

关闭FORM时出现红色进度条_wdsr90的博客-程序员宅基地

在做ORALCE EBS FORM时,把FORM挂到环境后,关闭from 时会出到红色进度条:  解决方法:1.找到APP_CUSTOM程序单元,看看被关闭的这个block是否初始设置退出窗口的情况。2.查看该block的导航数据块的属性有没有设置,只需要设置对应的前一个导航数据块和后一个导航数据块就可解决。注:在APP_CUSTOM 中没有设置推迟窗口事件的,要设

Oracle查询 GROUP BY后(每组数量)/(分组前总数)_十方天士的博客-程序员宅基地_oracle 分组后计数

对于分组后,想查询每组数量在总数所占百分比的情况。如:想知道郑州市所在的医院在整个河南所占的比例SELECT T2."NAME", COUNT( 1 ) TOTAL, 100 * ROUND( COUNT( 1 ) / SUM( COUNT( 1 ) ) OVER ( ), 4 ) || '%' PERCENT FROM PMR005_ORG T INNER JOIN PMR025_AREA T2 ON T.ADMINISTRATIVECODE = T2.UNITID WHERE.

随便推点

DIV重叠 CSS让DIV层叠 两个DIV或多个DIV顺序重叠加_影孓的博客-程序员宅基地_div 重叠

DIV重叠 CSS让DIV层叠、叠加,CSS让两个DIV或多个DIV按顺序重叠叠加篇让DIV重叠并按想要顺序重叠需要CSS来实现,即CSS绝对定位进行实现。重叠样式需要主要CSS样式解释1、z-index 重叠顺序属性2、position:relative和position:absolute设置对象属性为可定位(可重叠)3、left right top bottom绝对定位具体位置设...

多边形游戏_xing halo的博客-程序员宅基地

多边形游戏  多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。1 将一条边删除。2 随后n-1步按以下方式操作:  (1)选择一条边E以及由E连接着的2个顶点V1和V2;  (2)用一个新的顶点取代边E以及由E连接着的...

Mybatis中文文档_wzc_ss的博客-程序员宅基地_mybatis中文文档

MyBatis文章目录MyBatis简介什么是MyBatis入门安装从 XML 中构建 SqlSessionFactory不使用 XML 构建 SqlSessionFactory从 SqlSessionFactory 中获取 SqlSession探究已映射的 SQL 语句**对命名空间的一点补充****命名解析**作用域(Scope)和生命周期**对象生命周期和依赖注入框架**SqlSessionFactoryBuilderSqlSessionFactorySqlSession映射器实例配置属性(prop

几款不错的整站下载工具_寇林2019的博客-程序员宅基地_整站下载

有的人利用整站下载工具下载网站到本地进行慢慢的欣赏,有的人利用全站下载工具创建垃圾站。不管你是出于什么样的目的,下面这些工具软件你可以会需要。TeleportUltraTeleport Ultra所能做的,不仅仅是离线浏览某个网页(让你离线快速浏览某个网页的内容当然是它的一项重要功能),它可以从Internet的任何地方抓回你想要的任何文件,它可以在你指定的时间自动登录到你指定的网站下载你指定...

【UE4从零开始 036】大气表达式_后山之人的博客-程序员宅基地

AtmosphericFogColor(大气雾颜色)AtmosphericFogColor(大气雾颜色) 材质表达式用来在全局空间中的任意位置,查询大气雾的当前颜色。如果没有输入全局空间位置,则使用相关像素的全局位置。当需要让材质逐渐融入远方的雾颜色时,这个非常有用。在以下示例中,使用 AtmosphericFogColor(大气雾颜色)节点来设置“底色”(Base Color),并且 Wor...

POP3/IMAP, SMTP名词解释_weixin_34402090的博客-程序员宅基地

什么是POP3、SMTP和IMAP?POP3POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP...

推荐文章

热门文章

相关标签