生活随笔
收集整理的這篇文章主要介紹了
[Java] 使用HttpClient实现文件下载
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用HttpClient實現(xiàn)文件下載
服務端:
服務端是一個SpringBoot服務,寫了一個接口用于客戶端請求文件,客戶端攜帶參數(shù)(文件名fileName)使用Get方式請求;
服務端獲取到文件名后將與本地倉庫地址E:/downloadRepository/組成絕對路徑,獲取文件轉換成流,最后利用OutputStream對象將緩沖區(qū)的數(shù)據(jù)送到客戶端;
緩沖區(qū)大小也可設置為一個定值(如:1024*1024),然后再循環(huán)寫入輸出流對象;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
import org
.springframework
.web
.bind
.annotation
.RequestMethod
;
import org
.springframework
.web
.bind
.annotation
.RestController
;import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
import java
.io
.*
;@RestController
public class RequestController {@RequestMapping(path
= "/download", method
= RequestMethod
.GET
)public void downLoad(HttpServletResponse response
, String fileName
){File file
= new File("E:/downloadRepository/" + fileName
);try{InputStream inputStream
= new BufferedInputStream (new FileInputStream(file
));byte[] buffer
= new byte[inputStream
.available()];inputStream
.read(buffer
);inputStream
.close();OutputStream outputStream
= new BufferedOutputStream(response
.getOutputStream());outputStream
.write(buffer
);outputStream
.flush();outputStream
.close();}catch (Exception e
){e
.printStackTrace();}}
}
原文件:
原文件所在地址;
原文件內容;
客戶端:
請求參數(shù)為一個文件的文件名,這里我們通過URIBuilder對象的addParameter()方法來進行設置請求參數(shù);
在狀態(tài)碼等于200時,將請求來的文件利用FileUtils工具類將字符串轉換成文件,并且該方法可以設置保存路徑;
import org
.apache
.commons
.io
.FileUtils
;
import org
.apache
.http
.client
.methods
.CloseableHttpResponse
;
import org
.apache
.http
.client
.methods
.HttpGet
;
import org
.apache
.http
.client
.utils
.URIBuilder
;
import org
.apache
.http
.impl
.client
.CloseableHttpClient
;
import org
.apache
.http
.impl
.client
.HttpClients
;
import org
.apache
.http
.util
.EntityUtils
;
import java
.io
.*
;public class RequestFileService {public void httpRequest(String fileName
) {String url
= "http://localhost:8080/download";String savePath
= "E:/demo/" + fileName
;CloseableHttpClient httpclient
= HttpClients
.createDefault();CloseableHttpResponse response
= null
;try {URIBuilder urlBuilder
= new URIBuilder(url
);urlBuilder
.addParameter("fileName", fileName
);HttpGet httpGet
= new HttpGet(urlBuilder
.build());response
= httpclient
.execute(httpGet
);if (response
.getStatusLine().getStatusCode() == 200) {String content
= EntityUtils
.toString(response
.getEntity(), "UTF-8");FileUtils
.writeStringToFile(new File(savePath
), content
, "UTF-8");}} catch (Exception e
) {e
.getStackTrace();}finally {try {response
.close();httpclient
.close();}catch (IOException e
){e
.getStackTrace();}}}public static void main(String
[] args
) {RequestFileService requestFileService
= new RequestFileService();requestFileService
.httpRequest("205老面館.txt");}
}
下載結果:
按照代碼所設定的路徑,應該存在E:/demo/目錄下;
檢查文件完整性,沒啥問題:)
總結
以上是生活随笔為你收集整理的[Java] 使用HttpClient实现文件下载的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。