Java文件上传-Apache Commons FileUpload工具包极速入门案例
-
文件上传的要求
- form表单属性enctype=“multipart/form-data”
-
后台使用 HttpServletRequest的getInputStream()方法可以得到撒谎那个村的数据信息,但是需要自行解析流…比较麻烦。而Apache Commons FileUpload工具包对此操作进行了相应的封装,可以直接拿来使用
-
Apache Commons FileUpload使用步骤
- 创建磁盘文件项工厂对象 DiskFileItemFactory
- 创建一个ServletFileUpload
- 解析request
- 然后保存文件
以下是一个极简的案例:
- 页面 upload.jsp
<form action="upload" method="post" enctype="multipart/form-data">
<input type="text" name="desc"><br>
<input type="file" name="file"><br>
<input type="submit">
</form>
- 简单的后台代码
@WebServlet("/upload")
public class FileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 创建磁盘文件项工厂
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 创建一个ServletFileUpload
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 解析request
try {
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
for (FileItem fileItem : fileItems) {
if (fileItem.isFormField()) {
// 是否为表单输入项
String name = fileItem.getFieldName();
String value = fileItem.getString();
System.out.println("name:" + name + "----value:" + value);
}else{
// 文件
// 拿到upload目录代表的File对象
File uploadedFile = new File(getServletContext().getRealPath("/upload"));
// 目录不存在则先创建一下
if (!uploadedFile.exists()) {
uploadedFile.mkdirs();
}
// 创建一个用来保存文件的File对象:在upload目录下使用原始文件名保存
// 比如上传的是 a.txt 则保存到 upload目录也是 a.txt(也可以取随机名,自行根据业务操作即可)
File file = new File(uploadedFile, fileItem.getName());
// 写入文件
fileItem.write(file);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
其实Apache Commons FileUpload工具包还是有些复杂,步骤较多,有一些其他框架比如struts、springmvc都对其进行了封装,可以简化开发步骤。有兴趣的话可以自行查阅官网资料进行学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了