java 以流的形式从服务器下载文件并保存到本地
1.基本实现流程当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步:(1)客户端发起一个url请求,获取连接对象。(2)服务器解析url,并且将指定的资源返回一个输入流给客户。(3)建立存储的目录以及保存的文件名。(4)输出了写数据。(5)关闭输入流和输出流。2.实现方法的代码@...
·
1.基本实现流程
当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步:
(1)客户端发起一个url请求,获取连接对象。
(2)服务器解析url,并且将指定的资源返回一个输入流给客户。
(3)建立存储的目录以及保存的文件名。
(4)输出了写数据。
(5)关闭输入流和输出流。
2.实现方法的代码
@RequestMapping("/getFileByUrl")
public void getImage(String filePath,String ccs_id, HttpServletRequest request, HttpServletResponse response) {
// 从服务器端获得文件流,并输出到页面
log.info("filePath---"+filePath);
String queryString = request.getQueryString();
String replace = queryString.replace("filePath=", "");
log.info("queryString---"+replace);
if (filePath.indexOf("ccs_id") == -1){
log.info("ccs_id---"+ccs_id);
filePath+="&ccs_id="+ccs_id;
}
InputStream inputStream = FileDownloadUtil.getInputStream(filePath);
FileDownloadUtil.writeFile(response, inputStream);
}
public class FileDownloadUtil {
/**
* @return
* @description: 从服务器获得一个输入流
*/
public static InputStream getInputStream(String urlPath) {
InputStream inputStream = null;
HttpURLConnection httpURLConnection = null;
try {
URL url = new URL(urlPath);
httpURLConnection = (HttpURLConnection) url.openConnection();
// 设置网络连接超时时间
httpURLConnection.setConnectTimeout(3000);
// 设置应用程序要从网络连接读取数据
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("GET");
int responseCode = httpURLConnection.getResponseCode();
System.out.println("responseCode is:" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
// 从服务器返回一个输入流
inputStream = httpURLConnection.getInputStream();
} else {
inputStream = httpURLConnection.getErrorStream();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
/**
* @param resp
* @param inputStream
* @description: 将输入流输出到页面
*/
public static void writeFile(HttpServletResponse resp, InputStream inputStream) {
OutputStream out = null;
try {
out = resp.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while ((len = inputStream.read(b)) != -1) {
out.write(b, 0, len);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)