java http 上传文件_java利用httpClient实现后台文件上传请求

之前写过基于html和js的文件上传方法java 用springMVC 和HttpServletRequest 两种实现文件上传的方法和httpClient后台执行普通post请求的文章java通过httpClient从接口请求数据入库以及自动生成实体工具类,最近接到一个需求,需要用到后台去调用远程服务器的文件上传接口实现文件上传,用到了httpClient的MultipartEntityBuilder实现。

maven引入httpClient依赖

org.apache.httpcomponents

httpcore

4.4.13

org.apache.httpcomponents

httpclient

4.5.12

org.apache.httpcomponents

httpmime

4.5.12

以上依赖是笔者成文时maven最新的依赖包。

新建一个UploadFileUtil工具类:

package com.zhaohy.app.utils;

import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

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.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class UpLoadFileUtil {

private static Logger logger = LoggerFactory.getLogger(UpLoadFileUtil.class);

/**

* 通过httpClient上传文件

* @param fileName

* @param path

* @return 外部域名的下载url

*/

public static String UploadFileByHttpClient(String fileName,String path, String url) {

String result = "";

CloseableHttpClient httpClient = HttpClients.createDefault();

try {

HttpPost httpPost = new HttpPost(url);

//HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码

MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);

httpPost.addHeader("header1", "111");//头部放文件上传的head可自定义

File file = new File(path+fileName); //上传文件的路径

builder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName);

builder.addTextBody("params1", "1");//其余参数,可自定义

builder.addTextBody("params2", "2");

HttpEntity entity = builder.build();

httpPost.setEntity(entity);

HttpResponse response = httpClient.execute(httpPost);// 执行提交

HttpEntity responseEntity = response.getEntity();//接收调用外部接口返回的内容

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){

// 返回的内容都在content中

InputStream content = responseEntity.getContent();

// 定义BufferedReader输入流来读取URL的响应

BufferedReader in = new BufferedReader(new InputStreamReader(content));

String line;

while ((line = in.readLine()) != null) {

result += line;

}

if(!AppFrameworkUtil.isBlank(result)) {

logger.info("上传文件"+fileName+"返回参数==>"+result);

}else {

logger.error("上传文件失败:返回result为null");

}

}

}catch(Exception e) {

logger.error("上传文件失败:",e);

}finally {//处理结束后关闭httpclient的链接

try {

httpClient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

}

上面代码中 fileName是文件名称,本地文件路径,url是远程上传接口url,通过httpPost.addHeader来自定义header参数,builder.addTextBody来自定义其他参数,相当于html中form表单中其他的参数,可解析返回来的result拿到自己想拿的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

morse java_华威MORSE,华威数统那个比较好?

其实没什么高下之分了。 毕竟大家都在一个系,上下课交作业都在一起。我个人觉得,数统要比morse更flexible一些。首先你要明白morse和数统课程上的区别在哪里:数统 大一必修数统大一必修共计84CATSmorse大一必修morse大一必修共计120CATS其实差的就是EC10…

java中 以下接口以键_java复习题

1.Java中的long类型占用()个字节。A、1B、2C、4D、82.以下关于继承的叙述不正确的是()。A、在Java中类只允许单一继承B、在Java中一个类只能实现一个接口C、在Java中一个类可以同时继承一个类和实现一个接口D、在Java中接口允许多继承3.4&…

Java游戏有易筋经_易筋经- JavaWeb-1

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言组成部分:ECMAScript:js基础语法(规定 关键字 运算符 语句 函数…

java导出hbase表数据_通用MapReduce程序复制HBase表数据

编写MR程序,让其可以适合大部分的HBase表数据导入到HBase表数据。其中包括可以设置版本数、可以设置输入表的列导入设置(选取其中某几列)、可以设置输出表的列导出设置(选取其中某几列)。原始表test1数据如下:每个row key都有两个版本的数据,…

java双语试卷_Java程序设计基础(双语)试题题目及答案,课程2021最新期末考试题库,章节测验答案...

若二项式(x+13x)n的展开式中含3x的项是第三项,则n的值是______.(x2+1ax)6(a>0)的展开式中常数项是15,那么展开式中所有项系数和是______.(x2+1ax)6(a>0)的展开式中常数项…

java服务器和linux_在Linux下开一个Java服务器(使用CatServer Pro)

引言Linux开服具有快速,高效,性能等特点,而Windows虽然简单,但是不具备Linux良好的性能。本教程就说明一下简单的Linux开服方式(需要教程的人,如果你学会后,请无偿帮助更多的人。)服务器准备首先。先准备一…

java中js九个隐含对象_第九章 JSP标签——《跟我学Shiro》

Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮。导入标签库标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。guest标签欢迎游客访问,登录用户没有身份验证时显示相应信息,即游客访问信息。…

java中jsp标准动作_JavaBean和jsp标准动作

一.JavaBean 1.理解:可以重用的java类 2.分类 1)封装数据的bean(相当于实体类) 2)封装业务的bean(一般就是实现增删改查) 3.注意: 1)封装数据的bean一般要满足如下两个条件 1.implements Serializable:实现序列化接口 2.拥有一个无参的public…

我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法

我的世界崩溃怎么办?下面吾爱网小编给大家带来我的世界无法正常启动的解决方法,需要的朋友可以参考下。我的世界作为许多玩家都十分喜爱的模拟经营沙盘类游戏,经常有玩家反映在玩我的世界的时候,游戏总是会出现崩溃或者无法启动的情况,玩家在遇到的时候不知道怎么办…

手写实现java中的trim_JS中字符串trim()使用示例

示例一:测试JS扩展方法// 合并多个空白为一个空白String.prototype.ResetBlank function() { //对字符串扩展var regEx /\s/g;return this.replace(regEx, );};window.onload function(){var str "你 在他想还好吗?";alert(str);str str.ResetBlan…

java excil表格开发_JAVA导出Excel电子表格的方法

JAVA导出Excel电子表格的方法package com.qingruxu.excel;import java.io.File;import java.io.IOException;import java.net.URL;import jxl.Sheet;import jxl.Workbook;import jxl.format.Border;import jxl.read.biff.BiffException;import jxl.write.Blank;import jxl.writ…

vue3 新项目 - 搭建路由router

创建router/index 文件 main.ts 安装 router 然后 在 app下面 去 设置 路由出口

java json中的注释_如何使用Java中的@Expose注释从JSON中排除字段?

Gson Expose批注可用于标记要公开或不公开(串行化或反序列化)的字段。 expose注释可以取两个参数和每个参数是可以采取任一值的布尔真或假。为了使GSON对Expose批注做出反应,我们必须使用GsonBuilder类创建一个Gson实例,并需要调用excludeFieldsWithoutE…

java 屏蔽邮箱_使用javamail发送邮件的时候如何阻止附件内容输出到控制台

我在使用JavaMail发送带附件的邮件时候,每次到了Transport.sendMessage()这一步,控制台就会输出附件内容,请问如何设置可以取消输出呢?public void sendFileAttachedMail(String fromMail, String toMail, String fromMailPwd, St…

java如何获得相反的颜色_javascript – 如何根据当前颜色生成相反的颜色?

更新:GitHub上的生产就绪代码.我就是这样做的:>将HEX转换为RGB>反转R,G和B组件>将每个组件转换回HEX>用零和输出填充每个组件.function invertColor(hex) {if (hex.indexOf(#) 0) {hex hex.slice(1);}// convert 3-digit hex to 6-digits.…

php暂停循环,在特定数量的递归循环后,PHP停止执行

我遇到的问题很奇怪。 在执行递归循环时会发生这种情况。 使用for循环或任何其他迭代执行相同任务时,不会发生这种情况。在?21 000次以下递归调用函数时,一切正常。 超过此数字时会出现问题。我的工作代码:foo();function foo($i 1) {if ($…

thinkphp3 php jwt,thinkphp框架使用JWTtoken的方法详解

本文实例讲述了thinkphp框架使用JWTtoken的方法。分享给大家供大家参考,具体如下:简介一:JWT介绍:全称JSON Web Token,基于JSON的开放标准((RFC 7519) ,以token的方式代替传统的Cookie-Session模式&#xf…

php 64位编码解码,php base64 编码和解码

/*** 自定义规则方式编码和解码**/public function test_changinttoStr () {$intvalue1 1232344234;$intStr ;$str "Y 9 L F k g y 5 R o v i x I 1 a O f 8 U h d s 3 r 4 D M p l Q Z J X P q e b E 0 W S j B n 7 w V z m N 2 G c 6 T H C A K u t";$seq expl…

matlab能力处理,书+程序《MATLAB图像处理:能力提高与应用案例》赵小川

【实例简介】MATLAB图像处理能力提高与应用案例 [赵小川 编著] 2014年版,书程序(仅供学习)【实例截图】【核心代码】c3c59b5e-16c1-4bda-938e-8fcfb2ff870d└── 《MATLAB图像处理:能力提高与应用案例》书程序├── 1.1 图像多分辨率金字塔.zip├── 1.2图像的矩…

wamp php启动不成功,wamp的mysql 启动失败解决

wamp启动失败,查看原因是mysql 启动失败首先查看mysql的启动日志命令:mysqld --console知道error报错的地方:然后百度了此报错,解决方法在my.ini中添加innodb_force_recovery 1发现这个会影响insert需要设置为 innodb_force_reco…