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();
}
}
}
}