热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

httpclient上传附件实例

httpclient单附件上传实例(扩展多附件上传实例,点我)***上传附件*@paramhost*@paramuri

httpclient 单附件上传实例  (扩展多附件上传实例,点我) 

    /**
     * 上传附件
     * @param host
     * @param uri
     * @param filePath  文件路径
     * @param name  服务端定义的附件名
     * @param param  请求带的参数
     * @return
     */
    public String upload(String host, String uri, String filePath,String name, Map param) {
        logger.info("*****************request*****************");
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse respOnse= null;
        String url = host + uri ;
        String rst = "";
        try {
            httpClient = HttpClients.createDefault();
            logger.info("请求路径: "+ url);
            HttpPost httpPost = new HttpPost(url);
             //通过当前类的加载器来加载资源,调用getResourceAsStream()是保证和类类型同一个加载器加载
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);  //获取resources下的资源文件
            File file = new File(filePath);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create(); //创建MultipartEntityBuilder对象
        //添加上传的二进制文件
            builder.addBinaryBody(name, inputStream, ContentType.create("multipart/form-data",Consts.UTF_8), file.getName());  
            for (Map.Entry entry : param.entrySet()) {
		        String key = entry.getKey();
		        String value = entry.getValue();
		        StringBody stringBody = new StringBody(value, create("text/plain", Consts.UTF_8)); //解决中文乱码问题
               //添加请求入参
		        builder.addPart(key, stringBody);
		        logger.info("请求参数:"+key+":"+ value);
            }
            HttpEntity reqEntity = builder.build();
            httpPost.setEntity(reqEntity);
              // 发起请求 并返回请求的响应
            respOnse= httpClient.execute(httpPost);
               // 获取响应对象
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
		          // 打印响应内容
                rst = EntityUtils.toString(resEntity, Charset.forName("UTF-8")) ;
                logger.info("*****************response*****************");
                logger.info("响应结果: " +rst);
            }
             // 销毁
            EntityUtils.consume(resEntity);
            return rst;
        } catch (Exception e) {
            logger.info("出错啦: "+e.getMessage());
            e.printStackTrace();
            return "出错了";
        } finally {
            try {
		    if (response != null) {
		        response.close();
	        }
            } catch (IOException e) {
		        e.printStackTrace();
            }
		    try {
		    if (httpClient != null) {
                httpClient.close();
		    }
		    } catch (IOException e) {
		        e.printStackTrace();
		        }
        }
    } 

 调用方法

    /**
       * @description: TODO 上传图片
       * @author : xxx
       * @date 2019/6/6 11:15
       */
    public String uploadImage() throws Exception {
        Map params  = new HashMap<>();
        params.put("uploadType","1");
	  //文件放置resources目录下, 服务端定义接收附件名称为 imageFile
        String rst = upload("http://xxxx.com","/web/upload","picture/repaymentPic.jpg","imageFile",params);
        return rst;
    }

  

请求类型表:查看

基本步骤:

1.设置上传的模式;
  setMode(HttpMultipartMode mode),其中mode主要有BROWSER_COMPATIBLE,RFC6532,STRICT三种,默认值是STRICT。
2.创建MultipartEntityBuilder对象,并添加需要上传的数据;
 a.利用MultipartEntityBuilder.create()来创建对象;
 b.addBinaryBody:以二进制的形式添加数据,可以添加File、InputStream、byte[]类型的数据。
  addBinaryBody(String name, File file, ContentType contentType, String filename)
  addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)
  addBinaryBody(String name, byte[] b, ContentType contentType, String filename)
 c.addTextBody:添加文本数据
  addTextBody(String name, String text, ContentType contentType)
 d.addPart:以Key/Value的形式添加ContentBody类型的数据
  addPart(String name, ContentBody contentBody)

MultipartEntityBuilder用法

2.MultipartEntityBuilder这个类主要用于创建HttpEntity。它的主要方法有:

修饰符和类型

方法和描述

MultipartEntityBuilder

addBinaryBody(String name, byte[] b) 

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, byte[] b, ContentType contentType, String filename) 

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file) 

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file, ContentType contentType, String filename) 

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream) 

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream, ContentType contentType, String filename) 

将输入流以二进制的形式添加数据。

MultipartEntityBuilder

addPart(String name, ContentBody contentBody) 

添加ContentBody 类型的数据。

MultipartEntityBuilder

addTextBody(String name, String text) 

添加文本数据。

MultipartEntityBuilder

addTextBody(String name, String text, ContentType contentType) 

以指定的内容类型添加文本数据。

HttpEntity

build() 

创建一个HttpEntity。

static MultipartEntityBuilder

create() 

创建一个MultipartEntityBuilder对象。

MultipartEntityBuilder

setBoundary(String boundary) 

设置边界。

MultipartEntityBuilder

setCharset(Charset charset) 

设置请求的编码格式。

MultipartEntityBuilder

setLaxMode() 

MultipartEntityBuilder

setMode(HttpMultipartMode mode) 

设置模式。

MultipartEntityBuilder

setStrictMode() 


推荐阅读
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • fileuploadJS@sectionscripts{<scriptsrc~Contentjsfileuploadvendorjquery.ui.widget.js ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
  • 开发笔记:UEditor调用上传图片上传文件等模块
    1、引入ue相关文件,写好初始代码为了更好的封装整一个单独的插件,这里我们要做到示例化ue后隐藏网页中的编辑窗口,并移除焦点。 ... [详细]
author-avatar
手机用户2502884005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有