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.pswp.cn/news/443074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443074.shtml
英文地址,請注明出處:http://en.pswp.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…