Servlet实现简单文件上传功能

时间:2021-05-20

本文实例为大家分享了Servlet文件上传的具体代码,供大家参考,具体内容如下

两点要素:

1.表单提交方式必须是post
2.enctype一定要是multipart/form-data。
enctype的默认值是application/x-mons.fileupload.servlet.ServletFileUpload;public class UploadServlet extends HttpServlet { //文件夹路径常量 private static String TEMP_PATH = "E:/Learning/temp/170926"; private static final long serialVersionUID = 3364746345428715093L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 接收文件 boolean isMultipart = ServletFileUpload.isMultipartContent(request); // 判断是否是文件上传请求 if (!isMultipart) { out.println("Error : 表单必须包含 enctype=multipart/form-data"); return; } // 用于创建解析文件上传的工厂类 DiskFileItemFactory factory = new DiskFileItemFactory(); // 用于从请求中解析出文件 ServletFileUpload upload = new ServletFileUpload(factory); try { // 获取所有提交过来的文件(包含表单内容) 这个FileItem叫做一个项,这个项有可能是文件也有可能是表单参数 List<FileItem> items = upload.parseRequest(request); // 定义一个输出流 FileOutputStream fos = null; //缓冲区 byte [] buf = new byte[8192]; if (items != null && items.size() > 0) { // 不为空且长度大于0则遍历之 for (FileItem item : items) { if (item.isFormField()) { // isFormField = true 文本框的值 out.println("用户名: " + item.getString() + "<br />"); } else { //获取输入流 BufferedInputStream bis = new BufferedInputStream(item.getInputStream()); //初始化本地输出流 fos = new FileOutputStream(new File(TEMP_PATH + "/" + item.getName())); int len = -1; while ((len = bis.read(buf)) != -1) { fos.write(buf , 0 , len); fos.flush(); } out.println("文件: " + item.getName() + "已上传 <br />"); } } } } catch (FileUploadException e) { out.println("Error: 文件解析异常"); } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章