如何在struts2中上传和下载文件


 一,上传文件

          1.在jsp页面准备上传文件的标签

                    
          <input type=“file" name="uploads">

         2.准备上传文件的模型驱动(在Action中写)

         

private File[] uploads;  //上传文件,如果上传单个文件可以用File
private String[] uploadsFileName; //上传文件名
private String[] uploadsContentType;//上传文件类型


public File[] getUploads() {
		return uploads;
	}



public void setUploads(File[] uploads) {
		this.uploads = uploads;
	}



public String[] getUploadsFileName() {
		return uploadsFileName;
	}



public void setUploadsFileName(String[] uploadsFileName) {
		this.uploadsFileName = uploadsFileName;
	}



public String[] getUploadsContentType() {
		return uploadsContentType;
	}



public void setUploadsContentType(String[] uploadsContentType) {
		this.uploadsContentType = uploadsContentType;
	}


          3.上传的service逻辑代码

private void saveUserFile(ElecUser elecUser) {
		
		//上传时间
		 Date progressTime = new Date();
		//取得所有要上传的文件信息
		File[] uploads = elecUser.getUploads(); //上传文件
		String[] uploadsFileName = elecUser.getUploadsFileName();//上传文件名
		String[] uploadsContentType = elecUser.getUploadsContentType();//上传文件类型
		
		
		//遍历所有的文件,
		if(uploads!=null && uploads.length>0){
		for(int i=0;i<uploads.length;i++){
			 //组织PO对象进行保存
			 ElecUserFile elecUserFile = new ElecUserFile();
			 elecUserFile.setFileName(uploadsFileName[i]);//上传文件名
			 elecUserFile.setProgressTime(progressTime);//文件上传时间
			 
			 //上传文件并获得上传文件的路径
			 
			 String path = FileUtil.uploadFileAndReturnPath(uploads[i],uploadsFileName[i],"用户管理");
			 
			 elecUserFile.setFileURL(path);//文件上传路径
			 elecUserFile.setElecUser(elecUser);//设置与elecUser的关联关系,由于关系由多的一方维护,故在此设置
			 
			 //保存上传文件信息
			 elecUserFileDao.save(elecUserFile);
		}
		}
	}


               4.uploadFileAndReturnPath核心方法内容

                    
public static String uploadFileAndReturnPath(File upload, String fileName,
			String model) {
		
		//取得上传文件的统计路径,即upload
		 String basepath = ServletActionContext.getServletContext().getRealPath("/upload");
		 
		 //取得日期生产的路径
		  String datePath = DateUtil.dateToStringByFile( new Date());
		  
		//取得文件上传的全路径
		 String filePath = basepath+datePath+model;
		 
		 //查看该目录是否存在,如果不存在就创建
		  File filedir = new File(filePath); 
		 if(!filedir.exists()){
			 filedir.mkdirs();//创建多次目录
		 }
		 
		 //组合上传文件名+uuid
		 String uuidFileName = UUID.randomUUID().toString()+"_"+fileName;
		 
		 //创建上传的目标文件
		 File destfile = new File(filePath,uuidFileName);
		 //上传文件
		 upload.renameTo(destfile);
		return "/upload"+datePath+model+"/"+uuidFileName;
	}

 二,文件下载的配置

            一,下载的模型驱动设置

                     
//文件下载流
	private InputStream inputStream;
	
	public InputStream getInputStream() {
		return inputStream;
	}



	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

         二 ,Action的下载方法

public String download() throws Exception{

		
		/*使用sturts框架下载*/
		String fileId = elecUser.getFileId();
		//采用javaweb的方式下载
		//根据id取得elecUserFile对象
		ElecUserFile elecUserFile = elecUserService.findElecUserFileByFileId(fileId);
		//取得文件下载路径
		String filePath = ServletActionContext.getServletContext().getRealPath("")+ elecUserFile.getFileURL();
		//取得下载文件名
		String filename = elecUserFile.getFileName();
		//对中文文件名的处理
		filename = new String(filename.getBytes("gbk"),"iso-8859-1");
		request.setAttribute("filename",filename);
		elecUser.setInputStream(new FileInputStream(new File(filePath)));
		return "download";

		
	}


                          三,struts2中下载的配置

<result name="download" type="stream">
   <param name="inputName">inputStream</param>
   <param name="contentDisposition">attachment;filename="${#request.filename}"</param>
   <param name="bufferSize">1024</param>
   </result>

                    四,关于上传文件大小的配置(这会影响文件的上传是否能成功)

  
<!-- 配置上传文件的大小为10MB -->
	<constant name="struts.multipart.maxSize" value="10000000"></constant>



            

              

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值