下面是JavaEE中struts2实现文件上传下载功能的完整攻略。
一、文件上传功能实现
1.1 在JSP页面上添加文件上传表单
在JSP页面上添加文件上传表单,可以使用form标签,并且指定enctype属性为"multipart/form-data",如下所示:
<form action="uploadFile.action" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
其中,form的action属性为上传文件的地址,这里我们传输到了uploadFile.action上。
1.2 在struts.xml中配置文件上传的相关参数
在struts.xml中配置文件上传的相关参数,包括文件大小限制、文件类型限制等,示例如下:
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta"
class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest">
<param name="maximumSize">2097152</param>
<param name="allowedTypes">image/png,image/gif,image/jpeg,application/zip,application/vnd.ms-excel,application/pdf</param>
</bean>
<action name="uploadFile" class="com.example.UploadAction">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/png,image/gif,image/jpeg,application/zip,application/vnd.ms-excel,application/pdf</param>
<param name="maximumSize">2097152</param>
</interceptor-ref>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
这里需要注意,文件上传的拦截器需要配置在action前面,这样才能对文件进行处理。
1.3 编写UploadAction处理文件上传
在UploadAction中进行文件上传的处理,示例如下:
public class UploadAction extends ActionSupport {
// 上传文件的文件名
private String fileName;
// 上传文件的MimeType
private String contentType;
// 上传文件的字节数组
private byte[] file;
// 文件上传处理函数
public String execute() {
try {
InputStream inputStream = new ByteArrayInputStream(file);
OutputStream outputStream = new FileOutputStream(new File("D:/upload/" + fileName));
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
return SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
// 省略setter和getter方法
}
执行文件上传的函数中,通过指定文件名、文件类型和字节数组,可以将文件保存到指定的目录中。
二、文件下载功能实现
2.1 在JSP页面上添加文件下载链接
在JSP页面上添加文件下载链接,如下所示:
<a href="downloadFile.action?fileName=example.pdf">下载文件</a>
其中,downloadFile.action是文件下载的地址,fileName是需要下载的文件名称。
2.2 编写DownloadAction进行文件下载
在DownloadAction中进行文件下载的处理,示例如下:
public class DownloadAction extends ActionSupport {
// 文件名
private String fileName;
// 文件下载处理函数
public String execute() {
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream inputStream = new FileInputStream(new File("D:/upload/" + fileName));
OutputStream outputStream = response.getOutputStream();
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
return null;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
// 省略setter和getter方法
}
文件下载需要设置响应的Content-Type和Content-Disposition,在响应头中指定文件名,并将文件的字节数组输出给客户端。
至此,JavaEE中struts2实现文件上传下载功能已经完成,能够帮助用户快速完成在网站中的实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaEE中struts2实现文件上传下载功能实例解析 - Python技术站