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

從linux上拿文件到本地 服務(wù)器下載文件到本地


從linux上拿文件到本地 服務(wù)器下載文件到本地

文章插圖
簡介上一篇文章我們學(xué)習(xí)了如何在netty中搭建一個HTTP服務(wù)器,討論了如何對客戶端發(fā)送的請求進(jìn)行處理和響應(yīng),今天我們來討論一下在netty中搭建文件服務(wù)器進(jìn)行文件傳輸中應(yīng)該注意的問題 。
文件的content-type客戶端向服務(wù)器端請求一個文件,服務(wù)器端在返回的HTTP頭中會包含一個content-type的內(nèi)容,這個content-type表示的是返回的文件類型 。這個類型應(yīng)該怎么確認(rèn)呢?
一般來說,文件類型是根據(jù)文件的的擴(kuò)展名來確認(rèn)的,根據(jù) RFC 4288的規(guī)范,所有的網(wǎng)絡(luò)媒體類型都必須注冊 。apache也提供了一個文件MIME type和擴(kuò)展名的映射關(guān)系表 。
因為文件類型比較多,我們看幾個比較常用到的類型如下:
MIME type擴(kuò)展名image/jpegjpgimage/jpegjpegimage/pngpngtext/plaintxt text conf def list log inimage/webpwebpapplication/vnd.ms-excelxlsapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetxlsxapplication/msworddocapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentdocxapplication/vnd.openxmlformats-officedocument.presentationml.presentationpptxapplication/vnd.ms-powerpointpptapplication/pdfpdfJDK提供了一個MimetypesFileTypeMap的類,這個類提供了一個getContentType方法,可以根據(jù)請求的文件path信息,來推斷其MIME type類型:
private static void setContentTypeHeader(HttpResponse response, File file) {MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();response.headers().set(HttpHeaderNames.CONTENT_TYPE, mimeTypesMap.getContentType(file.getPath()));}客戶端緩存文件對于HTTP的文件請求來說,為了保證請求的速度,會使用客戶端緩存的機(jī)制 。比如客戶端向服務(wù)器端請求一個文件A.txt 。服務(wù)器在接收到該請求之后會將A.txt文件發(fā)送給客戶端 。
其請求流程如下:
步驟1:客戶端請求服務(wù)器端的文件===================GET /file1.txt HTTP/1.1步驟2:服務(wù)器端返回文件,并且附帶額外的文件時間信息:===================HTTP/1.1 200 OKDate:Mon, 23 Aug 2021 17:52:30 GMT+08:00Last-Modified:Tue, 10 Aug 2021 18:05:35 GMT+08:00Expires:Mon, 23 Aug 2021 17:53:30 GMT+08:00Cache-Control:private, max-age=60一般來說如果客戶端是現(xiàn)代瀏覽器的話,就會把A.txt緩存起來 。在下次調(diào)用的時候只需要在head中添加If-Modified-Since,詢問服務(wù)器該文件是否被修改了即可,如果文件沒有被修改,則服務(wù)器會返回一個304 Not Modified,客戶端得到該狀態(tài)之后就會使用本地的緩存文件 。
步驟3:客戶端再次請求該文件===================GET /file1.txt HTTP/1.1If-Modified-Since:Mon, 23 Aug 2021 17:55:30 GMT+08:00步驟4:服務(wù)器端響應(yīng)該請求===================HTTP/1.1 304 Not ModifiedDate:Mon, 23 Aug 2021 17:55:32 GMT+08:00在服務(wù)器的代碼層面,我們首先需要返回一個響應(yīng)中通常需要的日期字段,如Date、Last-Modified、Expires、Cache-Control等:
SimpleDateFormat dateFormatter = new SimpleDateFormat(HTTP_DATE_FORMAT, Locale.US);dateFormatter.setTimeZone(TimeZone.getTimeZone(HTTP_DATE_GMT_TIMEZONE));// 日期 headerCalendar 財路哥 = new GregorianCalendar();log.info(dateFormatter.format(財路哥.getTime()));response.headers().set(HttpHeaderNames.DATE, dateFormatter.format(財路哥.getTime()));// 緩存 headers財路哥.add(Calendar.SECOND, HTTP_CACHE_SECONDS);response.headers().set(HttpHeaderNames.EXPIRES, dateFormatter.format(財路哥.getTime()));response.headers().set(HttpHeaderNames.CACHE_CONTROL, "private, max-age=" + HTTP_CACHE_SECONDS);response.headers().set(HttpHeaderNames.LAST_MODIFIED, dateFormatter.format(new Date(fileToCache.lastModified())));然后在收到客戶端的二次請求之后,需要比較文件的最后修改時間和If-Modified-Since中自帶的時間,如果沒有發(fā)送變化,則發(fā)送304狀態(tài):


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

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