亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

服務(wù)器上傳文件用的方法 服務(wù)器上傳文件一般用什么


服務(wù)器上傳文件用的方法 服務(wù)器上傳文件一般用什么

文章插圖
簡介上一篇的文章中,我們講到了如何從HTTP服務(wù)器中下載文件,和搭建下載文件服務(wù)器應(yīng)該注意的問題,使用的GET方法 。本文將會(huì)討論一下常用的向服務(wù)器提交數(shù)據(jù)的POST方法和如何向服務(wù)器上傳文件 。
GET方法上傳數(shù)據(jù)按照HTTP的規(guī)范,PUT一般是向服務(wù)器上傳數(shù)據(jù),雖然不提倡,但是也可以使用GET向服務(wù)器端上傳數(shù)據(jù) 。
先看下GET客戶端的構(gòu)建中需要注意的問題 。
GET請(qǐng)求實(shí)際上就是一個(gè)URI,URI后面帶有請(qǐng)求的參數(shù),netty提供了一個(gè)QueryStringEncoder專門用來構(gòu)建參數(shù)內(nèi)容:
// HTTP請(qǐng)求QueryStringEncoder encoder = new QueryStringEncoder(get);// 添加請(qǐng)求參數(shù)encoder.addParam("method", "GET");encoder.addParam("name", "flydean");encoder.addParam("site", "www.flydean.com");URI uriGet = new URI(encoder.toString());有了請(qǐng)求URI,就可以創(chuàng)建HttpRequest了,當(dāng)然這個(gè)HttpRequest中還需要有對(duì)應(yīng)的HTTP head數(shù)據(jù):
HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, uriGet.toASCIIString());HttpHeaders headers = request.headers();headers.set(HttpHeaderNames.HOST, host);headers.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE);headers.set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP + "," + HttpHeaderValues.DEFLATE);headers.set(HttpHeaderNames.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");headers.set(HttpHeaderNames.REFERER, uriSimple.toString());headers.set(HttpHeaderNames.USER_AGENT, "Netty Simple Http Client side");headers.set(HttpHeaderNames.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");headers.set(HttpHeaderNames.COOKIE, ClientCookieEncoder.STRICT.encode(new DefaultCookie("name", "flydean"),new DefaultCookie("site", "www.flydean.com")));我們知道HttpRequest中只有兩部分?jǐn)?shù)據(jù),分別是HttpVersion和HttpHeaders 。HttpVersion就是HTTP協(xié)議的版本號(hào),HttpHeaders就是設(shè)置的header內(nèi)容 。
對(duì)于GET請(qǐng)求來說,因?yàn)樗械膬?nèi)容都包含在URI中,所以不需要額外的HTTPContent,直接發(fā)送HttpRequest到服務(wù)器就可以了 。
channel.writeAndFlush(request);然后看下服務(wù)器端接收GET請(qǐng)求之后怎么進(jìn)行處理 。
服務(wù)器端收到HttpObject對(duì)象的msg之后,需要將其轉(zhuǎn)換成HttpRequest對(duì)象,就可以通過protocolVersion(),uri()和headers()拿到相應(yīng)的信息 。
對(duì)于URI中的參數(shù),netty提供了QueryStringDecoder類可以方便的對(duì)URI中參數(shù)進(jìn)行解析:
//解析URL中的參數(shù)QueryStringDecoder decoderQuery = new QueryStringDecoder(request.uri());Map<String, List<String>> uriAttributes = decoderQuery.parameters();for (Entry<String, List<String>> attr: uriAttributes.entrySet()) {for (String attrVal: attr.getValue()) {responseContent.append("URI: ").append(attr.getKey()).append('=').append(attrVal).append("\r\n");}}POST方法上傳數(shù)據(jù)對(duì)于POST請(qǐng)求,它比GET請(qǐng)求多了一個(gè)HTTPContent,也就是說除了基本的HttpRequest數(shù)據(jù)之外,還需要一個(gè)PostBody 。
如果只是一個(gè)普通的POST,也就是POST內(nèi)容都是key=value的形式,則比較簡單,如果POST中包含有文件,那么會(huì)比較復(fù)雜,需要用到ENCTYPE=”multipart/form-data” 。
netty提供了一個(gè)HttpPostRequestEncoder類,用于快速對(duì)request body進(jìn)行編碼,先看下HttpPostRequestEncoder類的完整構(gòu)造函數(shù):
public HttpPostRequestEncoder(HttpDataFactory factory, HttpRequest request, boolean multipart, Charset charset,EncoderMode encoderMode)其中request就是要編碼的HttpRequest,multipart表示是否是”multipart/form-data”的格式,charset編碼方式,默認(rèn)情況下是CharsetUtil.UTF_8 。encoderMode是編碼的模式,目前有三種編碼模式,分別是RFC1738,RFC3986和HTML5 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: