### Struts中文件的上传与下载 #### 一、Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,用于简化Java Web应用的开发过程。它提供了一种结构化的模式来组织应用程序,使得开发更加模块化且易于维护。在Struts框架中,文件的上传和下载是常见的需求之一。 #### 二、文件上传 文件上传是指用户通过表单提交文件到服务器的过程。在Struts框架中,文件上传主要涉及到以下几个关键步骤: 1. **配置文件上传**:首先需要在Struts配置文件(struts-config.xml)中启用文件上传功能,并设置相应的参数,例如文件大小限制等。 ```xml <struts-config> <constant name="struts.multipart.maxSize" value="10000000"/> ... </struts-config> ``` 2. **表单设计**:在前端HTML表单中,需要设置`enctype="multipart/form-data"`属性,这样才能确保表单数据和文件可以正确发送到服务器。 ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="uploadFile"/> <input type="submit" value="上传"/> </form> ``` 3. **处理文件上传**:在Action类中,通常会使用`org.apache.struts.upload.FormFile`对象来处理文件上传。以下是一段典型的文件上传处理逻辑: ```java public ActionForward fileUp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException { FileForm fileForm = (FileForm) form; FormFile file = fileForm.getFile(); if (file != null && file.getFileName().length() > 0) { InputStream stream = null; try { // 检查文件是否为空 if (file.getFileSize() == 0) { System.out.println("FileNotFoundException had happened"); return mapping.findForward("toIndex"); } // 获取文件输入流 stream = file.getFileData(); } catch (FileNotFoundException e) { System.out.println("FileNotFoundException had happened"); return mapping.findForward("toIndex"); } // 获取保存路径 String savePath = request.getRealPath("/") + "/file/"; // 创建输出流 OutputStream outputStream = new FileOutputStream(savePath + file.getFileName()); byte[] buffer = new byte[1024]; int i = -1; while ((i = stream.read(buffer, 0, 1024)) != -1) { outputStream.write(buffer, 0, i); } outputStream.close(); stream.close(); } return mapping.findForward("success"); } ``` #### 三、文件下载 文件下载是指将服务器上的文件发送回客户端浏览器的过程。在Struts框架中实现文件下载同样需要进行一系列的操作: 1. **创建下载链接**:在前端页面上提供一个指向下载Action的链接或按钮。 ```html <a href="/download">点击下载</a> ``` 2. **处理文件下载**:在Action类中处理文件下载请求,设置响应头以便浏览器识别为下载文件,并读取文件内容返回给客户端。 ```java public ActionForward fileDown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException { // 获取文件名 String fileName = "example.txt"; // 设置响应头 response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/octet-stream"); // 获取文件输入流 String filePath = request.getRealPath("/") + "/file/" + fileName; InputStream stream = new FileInputStream(filePath); // 创建输出流 OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int i = -1; while ((i = stream.read(buffer)) != -1) { outputStream.write(buffer, 0, i); } outputStream.flush(); outputStream.close(); stream.close(); return null; } ``` #### 四、总结 文件上传和下载是Web应用程序中常见的功能。在Struts框架中实现这些功能时需要注意以下几个关键点: - 在Struts配置文件中启用文件上传支持并设置参数。 - 设计前端表单时确保设置了正确的`enctype`属性。 - 在Action类中处理文件上传和下载的逻辑,包括读取文件、处理异常以及设置响应头等。 - 对于文件下载,还需要正确设置响应头中的`Content-Disposition`和`Content-Type`属性,以便浏览器能够识别文件类型并触发下载。 通过遵循上述步骤,可以在Struts框架中顺利实现文件的上传和下载功能。
HttpServletRequest request, HttpServletResponse response)
throws IOException {
//获取表单及附件信息
FileForm _fileForm=(FileForm)form;
FormFile file=_fileForm.getFileName();
if(file!=null && file.getFileName().length()>0){
InputStream stream=null;
try{
//判断附件是否存在
if(file.getFileSize()==0){
System.out.println("FileNotFoundException had happened");
return mapping.findForward("toIndex");
}
//读取附件信息
stream=file.getInputStream();
}catch(FileNotFoundException e){
System.out.println("FileNotFoundException had happened");
return mapping.findForward("toIndex");
}
//获取项目的绝对路径
String savePath=request.getRealPath("/");
//创建输出流
OutputStream outputStream=new FileOutputStream(savePath+"/file/"+file.getFileName());
int i=-1;
byte[] buffer=new byte[1024];
//保存附件
while((i=stream.read(buffer, 0, 1024))!=-1){
outputStream.write(buffer, 0, i);
}
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 自动化应用驱动的容器弹性管理平台解决方案
- 各种排序算法 Python 实现的源代码
- BlurAdmin 是一款使用 AngularJs + Bootstrap实现的单页管理端模版,视觉冲击极强的管理后台,各种动画效果
- 基于JSP+Servlet的网上书店系统源代码项目包含全套技术资料.zip
- GGJGJGJGGDGGDGG
- 基于SpringBoot的毕业设计选题系统源代码项目包含全套技术资料.zip
- Springboot + mybatis-plus + layui 实现的博客系统源代码全套技术资料.zip
- 智慧农场小程序源代码全套技术资料.zip
- 大数据技术毕业设计源代码全套技术资料.zip
- renren-ui-nodejs安装及环境配置