//文件名称
String filepath = ServletActionContext.getServletContext()
.getRealPath(farmerQrCode.getQrCodeUrl());
File file = new File(filepath);
String fileName = new Date().getTime()+".png";
//设置请求信息
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType(response.getContentType());
response.setHeader("Content-disposition",
"attachment; filename="+fileName);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = 0;
FileInputStream inputStream = new FileInputStream(file);
byte [] buffer = new byte[3];
while((len = inputStream.read(buffer)) != -1)
{
baos.write(buffer, 0, len);
}
byte[] bytes = baos.toByteArray();
response.setHeader("Content-Length", String.valueOf(bytes.length));
BufferedOutputStream bos = null;
bos = new BufferedOutputStream(response.getOutputStream());
bos.write(bytes);
bos.close();
baos.close();
使用POI导出数据,然后将其下载。
//此处将HSSFWorkbook wb处理好,然后最后要导出文件时加上此代码。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.setContentType(response.getContentType());
response.setHeader("Content-disposition",
"attachment; filename=monthPayment.xls");
wb.write(baos);
byte[] bytes = baos.toByteArray();
response.setHeader("Content-Length", String.valueOf(bytes.length));
BufferedOutputStream bos = null;
bos = new BufferedOutputStream(response.getOutputStream());
bos.write(bytes);
bos.close();
baos.close();
1、使用inputStream.read(buffer)方法分段的把txt文本中的内容写入buffer数组。
这里为buffer数组指定了长度为3,所以“hello world!”这组长度为11的数据会被分成4次写入到buffer数组中。
当inputStream.read(buffer)把数据都写入到buffer数组之后,它最后还会返回一次len为-1的值,代表数据完全读完。
2、使用outStream.write(buffer, 0, len)方法,在while循环体内把每次写入到buffer数组的值再次叠加写入到内存缓冲区中。
3、使用outStream.toByteArray()方法把内存缓冲区中的数据流转换成字节数组。
4、最后把字符数组转换成字符串进行返回return new String(data)。