(014) HttpClient上傳文件

一、前言

雖然在 JDK 的 java.net 包中已經(jīng)提供了訪問 HTTP 協(xié)議的基本功能谅年,但是對(duì)于大部分應(yīng)用程序來說谈秫,JDK 庫本身提供的功能還不夠豐富和靈活。HttpClient 用來提供高效的瞧甩、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包弥鹦,并且它支持 HTTP 協(xié)議最新的版本和建議肚逸。

注意: HttpClient有兩種形式,一種是org.apache.http下的,一種是org.apache.commons.httpclient.HttpClient朦促。

二膝晾、客戶端處理
package TestZookeeper.TestZookeeper;

import java.io.File;
import java.io.FileInputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

/**
 * 發(fā)送請(qǐng)求
 * @author lindm
 * @date 2018/11/30
 */
public class App 
{
    public static void main(String[] args) {
        @SuppressWarnings("deprecation")
        HttpClient ht = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://127.0.0.1:8088/egovAtt/uploadEgovAttFile");
        HttpResponse rs = null;
        try{
            File testFile = new File("C:/Users/Administrator/Documents/Tencent Files/594485991/FileRecv/MobileFile/(批注)(9).pdf");
            System.out.println(testFile.exists());
            //文件流包裝到FileBody
            post.setEntity(new InputStreamEntity(new FileInputStream(testFile),testFile.length())); 
            //設(shè)置請(qǐng)求內(nèi)容類型(若不顯示設(shè)置务冕,默認(rèn)text/plain;不同的類型服務(wù)端解析格式不同血当,可能導(dǎo)致參請(qǐng)求參數(shù)解析不到的情況) 
            post.addHeader("Content-Type", "application/octet-stream"); 
            //設(shè)置請(qǐng)求參數(shù)docId
            post.addHeader("docId", "W86GOuSwhwKc1xGG");            post.addHeader("type", "pdf");
            //發(fā)送請(qǐng)求
            rs = ht.execute(post); 
            System.out.println(""+rs.getStatusLine().getStatusCode()+" "+EntityUtils.toString(rs.getEntity(),"utf-8"));
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            // 銷毀
            EntityUtils.consume(rs);
        }
    }

}

三、服務(wù)端處理
/**
     * 上傳附件洒疚,單文件上傳<br/>
     * <ul>
     *     <li>請(qǐng)求頭需攜帶參數(shù):docId(所屬文檔id)歹颓、type(附件類別)坯屿、contentType(文件類型)
     *     油湖、fileName(附件名稱)、Content-Type(文件類型)</li>
     * </ul>
     *
     * @return
     */
    @PostMapping("/uploadEgovAttFileWithFileStream")
    public @ResponseBody String uploadEgovAttFileWithFileStream(HttpServletRequest request) throws Exception {
     
        //從請(qǐng)求頭獲取參數(shù)
        String docId = request.getHeader("docId");
        String type = request.getHeader("type");
        String extension = request.getHeader("extension");
        String fileName = request.getHeader("fileName");

        // 讀取文件流
        InputStream is = request.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) > -1) {
            baos.write(buffer, 0, len);
        }
        baos.flush();
        is.close();
        // 轉(zhuǎn)為字節(jié)數(shù)組
        byte[] fileByte = baos.toByteArray();

        //...do anything

        return "upload success";
    }
四领跛、參考博文

1乏德、https://www.cnblogs.com/Scott007/p/3817285.html
2、https://www.cnblogs.com/wuweidong/p/5953167.html
3吠昭、http://www.reibang.com/p/7ab966dfa507

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喊括,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矢棚,更是在濱河造成了極大的恐慌郑什,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲肋,死亡現(xiàn)場離奇詭異蘑拯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兜粘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門申窘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孔轴,你說我怎么就攤上這事剃法。” “怎么了路鹰?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵贷洲,是天一觀的道長。 經(jīng)常有香客問我晋柱,道長优构,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任趣斤,我火速辦了婚禮俩块,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己玉凯,他們只是感情好势腮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漫仆,像睡著了一般捎拯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盲厌,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天署照,我揣著相機(jī)與錄音,去河邊找鬼吗浩。 笑死建芙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懂扼。 我是一名探鬼主播禁荸,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阀湿!你這毒婦竟也來了赶熟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤陷嘴,失蹤者是張志新(化名)和其女友劉穎映砖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灾挨,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邑退,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涨醋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓜饥。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浴骂,靈堂內(nèi)的尸體忽然破棺而出乓土,到底是詐尸還是另有隱情,我是刑警寧澤溯警,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布趣苏,位于F島的核電站,受9級(jí)特大地震影響梯轻,放射性物質(zhì)發(fā)生泄漏食磕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一喳挑、第九天 我趴在偏房一處隱蔽的房頂上張望彬伦。 院中可真熱鬧滔悉,春花似錦、人聲如沸单绑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搂橙。三九已至歉提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間区转,已是汗流浹背苔巨。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留废离,地道東北人侄泽。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像厅缺,于是被迫代替她去往敵國和親蔬顾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理湘捎,服務(wù)發(fā)現(xiàn),斷路器窄刘,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,449評(píng)論 6 428
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評(píng)論 25 707
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,963評(píng)論 1 3
  • 2017年1 月31日 (西貢) 早起窥妇。窗前獨(dú)坐,沏茶娩践,日記活翩。此住八樓,窗外可見一大片樹林翻伺,是公園里的材泄。查地圖,方...
    左民山人閱讀 85評(píng)論 0 0