struts2文件上传
文件上传的三种方案:
①、将上传的文件存放到数据库,以二进制的形式 oa系统 activity工作流框架
②、将文件上传到文件服务器(硬盘U足够大)中
③、将文件上传到tomcat所在的普通的web服务器
用struts上传文件要注意的事
1、我们用struts上传文件时,必须要的三个参数,然后给它提供set and get方法
private File file; //变量名指的是jsp的name属性,就是你要上传的属性
private String fileContentType;
private String fileFileName;
这个file变量名必须跟文件选择器的name名一样
2、要注意真实路径与虚拟路径的区别
真实路径:指的是自己电脑上存在的路径,在自己电脑上能够找得到
虚拟路径:指的是自己电脑上找不到的路径,在别人电脑上能够找得到的
(我们在公司开发时,自己写好的项目是打包给别人,放到linux主机上,所以我们在项目中定义一个路径,在自己的电脑上是找不到的,但在linux服务器中是存在的)
**获取Linux下的上传文件所在的位置 **
private String serverDir = "/uplaod";
private String getRealPath(String path) {
// TODO Auto-generated method stub
return application.getRealPath(path);
}
String realPath = getRealPath(serverDir+"/"+fileFileName);
//realPath 就是tomcat服务器所在的位置下的文件
3、FileUtils.copyFile(file, new File(realPath));
参数1:指的是本地文件
参数2:指的是在服务器生成的文件
4、下载
先获取文件名跟类型
//1. 内容类型
response.setContentType(d.getMime());
//2. 设置响应头
response.setHeader("Content-Disposition","attachment;filename=" + fileName);//文件名
/**
* 将远程的图片输出到本地
* 数据源inputstream:远程 new file(realPath)
* 目的:输出到本地的jsp response.getoutputstream
*/
FileUtils.copyFile(new File(realPath), response.getOutputStream());
直接调用别人写好的方法 FileUtils.copyFile(),有局限,这种方法上传速度较慢,我们可以自己写个方法,提高读取速度
private void copyStream(BufferedInputStream in, BufferedOutputStream out) {
byte[] bbuf = new byte[1024];
int len = 0;
try {
while((len = in.read(bbuf))!=-1) {
out.write(bbuf,0,len);
}
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//然后调用我们自己写的方法
public String download() {
String type = "image/jpeg" ;//定死的,自己开发时改成活的
String name = "2.jpg";
response.setContentType(type);
response.setHeader("Content-Disposition","attachment;filename=" + name);
String realPath = getRealPath(serverDir + "/" +name);
try {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(realPath)));
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
copyStream(in, out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}