通过URL下载文件(浏览器下载)
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Slf4j
public class DownLoadUtil {
public static void download(HttpServletResponse response, HttpServletRequest request, String fileUrl){
try {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
String browser = request.getHeader("User-Agent").toUpperCase();
response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + DownLoadUtil.browserFileName(browser, fileName));
@Cleanup
BufferedInputStream is = new BufferedInputStream(new URL(fileUrl).openStream());
@Cleanup
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[1024];
int len;
while ((len = is.read(buff, 0, buff.length)) != -1) {
out.write(buff, 0, len);
}
is.close();
out.close();
} catch (Exception e){
log.info("DownLoadUtil-download: 异常,{}", e.getMessage());
}
}
public static String browserFileName(String browser, String fileName){
String result = "";
try {
if (browser.contains("CHROME")) {
result = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
} else if ((browser.contains("FIREFOX"))) {
result = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
} else if (browser.contains("MSIE") || browser.contains("TRIDENT")) {
result = URLEncoder.encode(fileName, "UTF-8");
}
} catch (Exception e){
log.info("DownLoadUtil-browserFileName: 异常,{}", e.getMessage());
}
return result;
}
}