struts2 文件的上传与下载

一、struts2 文件上传

使用struts2 进行文件上传非常简单,只需要简单的几歩即可完成:

1). 页面上<form></form> 表单上要加上 method="post" enctype="multipart/form-data" 属性;

2). 上传的标签为  <input type="file" name="***">;

3). 项目中必须要包含 common-fileupload.jar和common-io.jar 两个 jar;

4). 可以在 struts.xml 文件中配置一些常用属性,来限制上传文件的类型、大小(默认为 2M)等:

<!-- 上传文件的大小,单位是 B(Byte)这里是5M-->
<param name="fileUpload.maximumSize">5242880</param>
<!-- 上传文件的扩展名 -->
<param name="fileUpload.allowedExtensions">
<span style="white-space:pre">	</span>.jpg,.jpeg,.png,.bmp,.gif,.ico,.dll,.psd,
<span style="white-space:pre">	</span>.txt,.rar,.zip,.java,.chm,.doc,.docx,.pdf,.xls,.xlsx,.ppt
</param>
<!-- 文件的内容类型 -->
<param name="fileUpload.allowedTypes">
<span style="white-space:pre">	</span>image/jpg,image/jpeg,image/png,image/bmp,image/gif,image/x-icon
<span style="white-space:pre">	</span>text/plain,application/zip,text/css,application/msword
</param>
5). 在 Action 中定义属性:

private File xxx; // 用户上传的资源
private String xxxFileName; // 文件名,必须以 FileName 结尾
private String xxx<span style="font-family: Arial; font-size: 14px; line-height: 26px;">ContentType;    //上传文件的MIME类型;</span>
省略getter/setter
这些属性都会随着文件的上传自动赋值;

在项目中新建一个 upload 文件夹,上传的文件即保存在此文件夹中,在程序中我们需要先得到 upload 文件夹在服务器上的真实地址。

具体 Action 代码如下:

// 得到 uplode 文件夹在服务器上的真实路径
			String dir = servletContext.getRealPath("/upload");
			// 以当前用户(用户名+id)作为文件夹名,即每个用户上传的资源都存在单独的文件夹中
			String userResPath = dir + File.separator + user.getUsername() + user.getId()
					+ File.separator;
			File userFolder = new File(userResPath);
			if (!userFolder.exists()) { // 如果文件夹不存在就创建文件夹
				userFolder.mkdir();
			} // 如果文件夹存在就上传文件
				// 文件扩展名
			String ext = userResFileName.substring(userResFileName.lastIndexOf("."));
			// 纳秒时间作为文件名(防止重名)
			long l = System.nanoTime();
			// 新文件路径
			File newFile = new File(userFolder, l + ext);
			try {
				FileUtils.copyFile(userRes, newFile);
			} catch (IOException e) {
				e.printStackTrace();
			}
二、struts2 文件下载

struts2的 stream 结果类型专门用于实现文件下载;在 Action 中需要声明以下变量以及它们的 getter 方法:

private String contentType;//下载的结果类型
private long contentLength;//下载的文件长度
//此响应头指定响应是文件下载类型,一般取值为attachment;filename=""
private String contentDisposition;
private InputStream inputStream;
然后在执行下载的方法中,为这些变量赋值

contentType = "application/octet-stream;charset=utf-8";
contentDisposition = "attachment;filename="+downName;
inputStream = new FileInputStream(filename);
其中的downName即为将要下载的文件的名称,可根据需要动态指定。由于不知道要下载的文件的具体类型,因此可指定 contentType = "application/octet-stream;charset=utf-8",charset指定下载文件使用的编码方式。具体action代码如下:

public String downloadResource(){
		model = resourceService.getResourceById(rid);
		String filename = servletContext.getRealPath(model.getResPath());
		String downName;
		try {
			//为文件名编码,防止中文乱码
			downName = URLEncoder.encode(model.getResName(), "utf-8");
			contentType = "application/octet-stream;charset=utf-8";
			contentDisposition = "attachment;filename="+downName;
			inputStream = new FileInputStream(filename);
			contentLength = inputStream.available();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}
struts.xml 文件中对应的 result 配置为:
<result name="success" type="stream">
<span style="white-space:pre">	</span><param name="bufferSize">2048</param>
</result>

以上即为基本的使用struts2进行文件的上传与下载。如果要限制上传的文件类型而又不知道对应的 MIME 类型,可以在 tomcat 的安装目录下的 web.xml 文件中查找,里面包含了几乎所有文件的 MIME 类型。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值