struts2文件上传

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;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值