/**
*fis 当前下载文件流
* fileName 当前下载文件名
*/
public static void downFile(HttpServletRequest request, HttpServletResponse response, InputStream fis,
String fileName) throws Exception
{
OutputStream output = null;
try
{
response.reset();
response.addHeader("Content-Disposition",
"attachment;filename=\"" + encodeDownloadFileName(fileName, request) + "\"");
response.setContentType("applicatoin/octet-stream");
// response.addHeader("Content-Length", "" + file.length());
output = response.getOutputStream();
byte[] buffer = new byte[1024 * 512];
int length;
while ((length = fis.read(buffer)) > 0)
{
output.write(buffer, 0, length);
}
output.flush();
} finally
{
IOUtils.closeQuietly(fis);
IOUtils.closeQuietly(output);
}
}
/**
* 处理下载文件名称乱码问题
* @param fileName 文件名称
* @param request 请求对象
* @return 编码之后的文件名称
* @throws IOException 异常
*/
public static String encodeDownloadFileName(String fileName, HttpServletRequest request) throws IOException
{
String userAgent = request.getHeader("User-Agent");
String newFilename = URLEncoder.encode(fileName, "UTF-8").replace("+", " ");
if (null == userAgent)
{
return newFilename;
}
userAgent = userAgent.toLowerCase();
if (userAgent.indexOf("edge") != -1 || userAgent.indexOf("trident") != -1)
{
return newFilename;
} else
{
return new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
}
public static void printJson(HttpServletResponse response, Object data)
{
PrintWriter out = null;
try
{
response.setContentType("application/json");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
out.print(data);
out.flush();
out.close();
} catch (Exception e)
{
e.printStackTrace();
} finally
{
IOUtils.closeQuietly(out);
}
}
浏览器下载文件Java工具类
最新推荐文章于 2023-03-14 09:09:18 发布