java downloads a file through url and outputs it
- 2020-12-18 01:49:30
- OfStack
Examples are as follows:
controller :
@RequestMapping(value = "/{loanid}/{atmtType}")
public void doGet(@PathVariable("loanid") String loanid,@PathVariable("atmtType") String atmtType,
HttpServletRequest req,HttpServletResponse response) {
Map<String,String> map = new HashMap<String,String>();
map.put("loanid", loanid);
Map<String, String> urlByLoanid= new HashMap<String,String>();
// Map<String, String> urlByLoanid = zcmQueryInfoService.queryUrlByLoanid(map);
try {
if(urlByLoanid!=null){
String wjurl="http://10.0.15.11:8080/gateway//nfs/marvel-core-admin/2017/10/11/compact_seal_17101119371231615_7.pdf";
//String wjurl = urlByLoanid.get("url");
int i = wjurl.lastIndexOf("/");
String fileName = wjurl.substring(i+1);
URL url = new URL(wjurl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// Set the timeout to 3 seconds
conn.setConnectTimeout(3*1000);
// Prevents the masking program from fetching and returning 403 error
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
// Get the input stream
InputStream inputStream = conn.getInputStream();
// Get your own array
byte[] bs = readInputStream(inputStream);
response.setContentType("application/octet-stream;charset=ISO8859-1");
BufferedOutputStream output = null;
BufferedInputStream input = null;
try {
output = new BufferedOutputStream(response.getOutputStream());
// Chinese file name must be transcoded as ISO8859-1, Otherwise it's a mess
String fileNameDown = new String(fileName.getBytes(), "ISO8859-1");
// Download as an attachment
response.setHeader("Content-Disposition", "attachment;filename=" + fileNameDown);
output.write(bs);
response.flushBuffer();
} catch (Exception e) {
log.error("Download log file error", e);
} // The user may have cancelled the download
finally {
if (input != null)
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
if (output != null)
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Gets the byte array from the input stream
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}