Struts2 文件上传和下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ScongHW/article/details/82990668

一、 文件上传

Struts2文件上传时,要使用Struts的标签<s:file />

例如:(以下的代码是一个小项目中的一部分,只给出文件上传下载部分代码,了解思想即可)

文件上传视图:

<s:form namespace="/" action="ClassesAction_upload" enctype="multipart/form-data">
	<s:hidden name="classId" value="%{classId}"></s:hidden>
	<table width="88%" border="0" class="emp_table" style="width:80%;">
	  <tr>
	    <td>选择课表:</td>
	    <td>&nbsp;</td>
	    <td>&nbsp;</td>
	  </tr>
	  <tr>
	    <td colspan="3">
	    <s:file name="schedule" ></s:file>
	    </td>
	  </tr>
	</table>
</s:form>
  • 表单中的文件格式类型enctype,要设置成"multipart/form-data"
  • 文件上传的标签<s:file name=""/>

实现部分:

	@InputConfig(resultName="uploadInput")
	public String upload() throws IOException{
		//1. 获得存放文件的目录
		String parentDir = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload");
		//2. 随机名称
		String fileName = UUID.randomUUID().toString().replace("-", "")+scheduleFileName;
		//3. 保存文件
		FileUtils.copyFile(schedule, new File(parentDir,fileName));
		
                //将数据保存在数据库classes表中
		classes.setUploadFilename(scheduleFileName);
		classes.setUploadTime(new Date());
		classes.setUploadPath("/WEB-INF/upload/"+fileName);
		//4. 更新
		this.classesService.updateUpload(classes);
		
		return "upload";
	}

二、 文件下载

实现代码(action)

	//写入流(要有get/set方法)
        private InputStream inputStream;
        //文件名(也要写get/set方法)
	private String filename;

	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}
	public InputStream getInputStream() {
		return inputStream;
	}
	
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public String getFilename() {
		return filename;
	}

	
	public String download() throws Exception{
		CrmClasses downloadClasses = this.classesService.findById(classes);
		filename = downloadClasses.getUploadFilename();
		String filePath = downloadClasses.getUploadPath();
		if(filename==null){
			return "uploadInput";
		}
		String userAgent = ServletActionContext.getRequest().getHeader("user-agent").toLowerCase();
		if(userAgent.contains("mise")||userAgent.contains("like gecko")){
			filename = URLEncoder.encode(filename,"utf-8");//将不安全的文件名改为utf-8  IE
		}else{
			filename = new String(filename.getBytes("utf-8"),"iso8859-1");  //非IE
		}
		String realpath = ServletActionContext.getServletContext().getRealPath(filePath);
		inputStream = new FileInputStream(realpath);
		return "success";
	}

在Struts.xml文件中设置视图

			<result type="stream">
				<param name="contentType">application/octet-stream</param>
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">attachment;filename=${filename}</param>
			</result>
  • contentType : 文件的下载类型,通常情况下,设置为“application/octet-stream”即可,如果想设置成其他值可以参考:http://tool.oschina.net/commons
  • inputName : 得到action中文件输入流
  • contentDisposition : 得到下载的文件的名称

猜你喜欢

转载自blog.csdn.net/ScongHW/article/details/82990668
今日推荐