HTTP协议提供了文件下载功能,具体参考:
http://doc.tedu.cn/rfc/rfc2616.txt 的19.5.1 Content-Disposition
其原理为:
只要设置Content-Disposition响应头浏览器就可以自动保存文件了。 Spring MVC Servlet Socket等技术都可以实现下载功能。
创建控制器方法处理下载请求:
/**
* 图片下载功能
*/
@RequestMapping(value="/img.do",
produces="image/png")
@ResponseBody
public byte[] image(
HttpServletResponse response)
throws IOException{
//@ResponseBody 与 返回值byte[] 配合时候
//Spring MVC会将byte[]数组填充到响应
//的消息正文中发送到浏览器
String file =
URLEncoder.encode("演示.png", "utf-8");
//还需要指定两个响应头
//Content-Type
//Content-Disposition: attachment; filename="fname.ext"
//response.setContentType("image/png");
response.setHeader(
"Content-Disposition",
"attachment; filename=\""+file+"\"");
byte[] body = createImage();
//response.setContentLength(body.length);
return body;
}
创建生成图片数据的方法
private byte[] createImage()
throws IOException{
BufferedImage img=
new BufferedImage(100, 50,
BufferedImage.TYPE_3BYTE_BGR);
img.setRGB(50, 25, 0xffffff);
//out相当于酱油瓶
ByteArrayOutputStream out=
new ByteArrayOutputStream();
//将图片的数据导入酱油瓶out
ImageIO.write(img, "png", out);
out.close();//关闭out
//将酱油瓶out中的数据到出来
byte[] bytes = out.toByteArray();
return bytes;
}
配置spring-mvc.xml在拦截器上放开 URL
<mvc:exclude-mapping path="/user/img.do"/>
编写demo.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>下载功能</h1>
<a href="user/img.do">下载测试图片</a>
</body>
</html>
测试。
与下载图片类似,可以实现下载Excel功能,其原理为:
导入Apache 提供的 Excel API
<!-- POI API 用于处理Excel文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
编写控制器方法
/*
* 下载 Excel
*/
@RequestMapping("/excel.do")
@ResponseBody
public byte[] export(
HttpServletResponse response)
throws IOException{
String file=URLEncoder.encode(
"表格.xlsx", "UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(
"Content-Disposition",
"attachment; filename=\""+file+"\"");
byte[] body = createExcel();
return body;
}
编写利用POI 生成Excel的方法
private byte[] createExcel() throws IOException {
//Workbook 就代表着一个Excel文件
XSSFWorkbook workbook =
new XSSFWorkbook();
//在工作簿中创建一个工作表(sheet)
XSSFSheet sheet=
workbook.createSheet("第一个表");
//在工作表中创建一行(row), 参数是行号:0 1 2 ...
XSSFRow row = sheet.createRow(0);
//在行中可以添加格子, 参数是列号:0 1 2 3 ...
XSSFCell cell = row.createCell(0);
cell.setCellValue("Hello World!");
ByteArrayOutputStream out=
new ByteArrayOutputStream();
workbook.write(out);
workbook.close();
out.close();
byte[] bytes=out.toByteArray();
return bytes;
}
配置拦截器,放开URL
<mvc:exclude-mapping path="/user/excel.do"/>
编写HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>下载功能</h1>
<a href="user/img.do">下载测试图片</a>
<a href="user/excel.do">导出Excel</a>
</body>
</html>
测试
Linux命令语法
命令 -选项 参数1 参数2 参数3
ls -al /
-a 显示全部内容
-l 显示长格式
/ 参数,目标文件夹
man 命令, 使用q按键退出手册
命令 --help
/ 根目录
|- etc <-
|- usr
|- home
| |- soft01 用户的主目录
|- root root用户的主目录
|- var
...
当前工作目录
pwd 显示当前的工作目录
cd 目标文件夹 改变当前工作目录
创建文件夹
cd 返回用户的主目录 mkdir 文件夹名 在当前文件夹中创建文件夹 mkdir 绝对路径名 在指定位置创建文件夹
如: cd mkdir demo mkdir /home/soft01/abc
创建文件
touch 文件名
修改时间
touch 已经存在文件名/文件夹 ls -l
复制文件/文件夹命令
cp 源文件/文件夹 目标文件/文件夹
源文件/文件夹必须存在! 不存在就会报错误. 目标文件/文件夹不存在就是创建新的文件/文件夹 如果目标文件/文件夹是存在, 文件则覆盖,文件夹 就是复制到文件夹中.
cp /etc/passwd passwd.bak 改名复制 cp /etc/passwd test 不改名复制 cp /etc/passwd test/pwd 改名复制 cp /etc/passwd . 复制到当前目录
复制文件夹必须使用 -r 进行递归复制 cp -r test abc abc不存在,将test复制为abc mkdir demo cp -r test demo 将文件夹复制到demo文件夹中
mv 源 目标
源:必须存在
目标:如果不存在,就是改名 目标如果存在就是移动
rm -rf 文件 文件夹 文件夹....
rm -rf passwd.bak passws t