生活随笔
收集整理的这篇文章主要介绍了
[Java] 使用HttpClient实现文件下载
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
使用HttpClient实现文件下载
服务端:
服务端是一个SpringBoot服务,写了一个接口用于客户端请求文件,客户端携带参数(文件名fileName)使用Get方式请求;
服务端获取到文件名后将与本地仓库地址E:/downloadRepository/组成绝对路径,获取文件转换成流,最后利用OutputStream对象将缓冲区的数据送到客户端;
缓冲区大小也可设置为一个定值(如:1024*1024),然后再循环写入输出流对象;
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();}}
}
原文件:
原文件所在地址;
原文件内容;
客户端:
请求参数为一个文件的文件名,这里我们通过URIBuilder对象的addParameter()方法来进行设置请求参数;
在状态码等于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实现文件下载的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。