文章摘要
这篇文章介绍了如何使用JavaServlet和Apache Commons FileUpload组件实现文件上传功能。文章详细描述了上传流程,包括:
1. **上传初始化**:通过`ServletContext`获取上传文件的路径,并初始化静态变量`path`。
2. **文件解析**:使用`DiskFileItemFactory`和`ServletFileUpload`类解析HTTP请求中的文件,并将每个文件项存储在列表中。
3. **文件处理**:遍历解析得到的文件列表,区分`form字段`和普通文件。对于`form字段`,提取文件名和内容,并将其作为属性添加到HTTP响应。对于普通文件,构造文件路径并存储文件内容。
4. **错误处理**:在代码中加入了异常处理逻辑,捕获运行时异常并显示错误信息。
5. **结果反馈**:根据处理结果,向前端发送成功或失败信息,并重定向到管理页面。
文章重点展示了上传逻辑的实现细节,适合对Servlet和FileUpload组件感兴趣的研究者或开发者。
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadAnnexServlet extends HttpServlet {
private static String path=””;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
path=this.getServletContext().getRealPath(“/upload”);
try {
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload up=new ServletFileUpload(factory);
List<FileItem> ls=up.parseRequest(request);
for (FileItem fileItem : ls) {
if (fileItem.isFormField()) {
String FieldName=fileItem.getFieldName();
//getName()返回的是文件名字 普通域没有文件 返回NULL
// String Name=fileItem.getName();
String Content=fileItem.getString(“gbk”);
request.setAttribute(FieldName, Content);
} else {
String nm=fileItem.getName().substring(
fileItem.getName().lastIndexOf(“\”) + 1);
File mkr=new File(path, nm);
if (mkr.createNewFile()) {
fileItem.write(mkr);//非常方便的方法
}
request.setAttribute(“result”, “上传文件成功!”);
}
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute(“result”, “上传失败,请查找原因,重新再试!”);
}
request.getRequestDispatcher(“/pages/admin/annex-manager.jsp”).forward(
request, response);
}
}