|
本文实例讲述了java中struts2实现文件上传下载功能实现方法。分享给大家供大家参考。具体分析如下:
1.文件上传
首先是jsp页面的代码
在jsp页面中定义一个上传标签
复制代码 代码如下:<tr>
<td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>
<td bgcolor="#FFFFFF">
<input type="file" name="upload" />
</td>
<td bgcolor="#FFFFFF"> </td>
</tr>
然后是BaseAction中定义的相关属性其它的就省略了(也可定义在自己的Action,换下访问修饰符即可)
复制代码 代码如下:/**
*Action基类
**/
public class BaseAction extends ActionSupport {
protected List<File> upload;
protected List<String> uploadContentType; //文件类型
protected List<String> uploadFileName; //文件名
protected String savePath; //保存路径
}
然后是Action中的一个上传方法,代码如下:
复制代码 代码如下:/**
* 8.上传附件
* @param upload
*/
public void uploadAccess(List<File> upload){
try {
if (null != upload) {
for (int i = 0; i < upload.size(); i++) {
String path = getSavePath() + ""+ getUploadFileName().get(i);
System.out.println(path);
item.setAccessory(getUploadFileName().get(i));
FileOutputStream fos = new FileOutputStream(path);
FileInputStream fis = new FileInputStream(getUpload().get(i));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer,len);
}
fis.close();
fos.close();
}
}
} catch (Exception e) {
logger.error("上传附件错误。",e);
}
}
接着是我的struts2.xml文件
复制代码 代码如下:<action name="itemRDAction_*" class="itemRDAction" method="{1}">
<param name="savePath">e:upload</param>
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedTypes">
application/octet-stream,image/pjpeg,image/bmp,image/jpg,image/png,image/gif,image/jpeg,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel
</param>
<param name="fileUpload.maximumSize">8000000</param>
</interceptor-ref>
<result name="show_item_rd_upd"> /WEB-INF/jsp/page_item/updItem_rd.jsp</result>
<result name="show_item_rd_list"> /WEB-INF/jsp/page_item/listItem_rd.jsp</result>
<result name="show_item_rd_push"> /WEB-INF/jsp/page_item/pushItem_rd.jsp</result>
</action>
savePath为保存路径,fileUpload.allowedTypes 用来限制上传文件类型 fileUpload.maximumSize 文件大小限制
2.文件下载
首先是页面中的下载链接
复制代码 代码如下:<tr>
<td width="20%" align="right" bgcolor="#F5F8F9"><b>附件:</b></td>
<td width="40%" bgcolor="#FFFFFF">
<div style="width:355px; float: left;">${item.accessory}</div>
<c:if test="${!empty item.accessory}">
<div class="btn_img" style="float: left;"><a style="color: black; text-decoration: none;" href="download.action?filename=${item.accessory}">下载</a></div>
</c:if>
</td>
<td width="40%" bgcolor="#FFFFFF"> </td>
</tr>
接着是DownloadAction的代码:
复制代码 代码如下:/**
* DownloadAction
*
* @author zhaoxz
*
*/
@Controller("downloadAction")
@Scope("prototype")
public class DownloadAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = -4278687717124480968L;
private static Logger logger = Logger.getLogger(DownloadAction.class);
private String filename;
private InputStream inputStream;
private String savePath;
private String mimeType;
public InputStream getInputStream() {
try {
String path = getSavePath() + "//"+ new String(filename.getBytes("ISO8859-1"),"utf-8");
System.out.println(path);
mimeType = ServletActionContext.getServletContext().getMimeType(path)+ ";charset=UTF-8";
inputStream = new FileInputStream(path);
String agent = request.getHeader("USER-AGENT");
System.out.println(agent);
if (null != agent) {
if (-1 != agent.indexOf("Firefox")) {// Firefox
mimeType = mimeType.replace("UTF-8","ISO8859-1");
} else {// IE7+ Chrome
System.out.println("IE,Chrome");
filename = new String(filename.getBytes("ISO8859-1"),"utf-8");
filename = java.net.URLEncoder.encode(filename,"UTF-8");
}
}
} catch (Exception e) {
logger.error("下载文件信息出错。",e);
}
if (null == inputStream) {
System.out.println("getResource error");
}
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
/*************************** get set ******************************/
public String getSavePath() {
return this.savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
然后是它的struts2.xml文件:
复制代码 代码如下:<action name="download" class="downloadAction">
<param name="savePath">E:/upload</param>
<result type="stream">
<param name="contentType">${mimeType}</param>
<param name="contentDisposition">attachment;filename="${filename}"</param>
<param name="inputName">inputStream</param>
</result>
</action>
下载的话注意下编码格式基本应该就没什么问题了.
上传过程碰到的问题
1.上传大文件就出错解决方法1
出现的错误有如下:
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|