web基础---->Fileupload文件的上传
2023-09-27 14:20:11 时间
这里我们介绍文件上传的知识,使用的是apache的Commons FileUpload框架。
文件上传的使用
项目的部分结构如下:
一、使用Commons FileUpload的上传功能,我们需要引入两个jar包:commons-fileupload和commons-io。首先我们列出html的部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>huhx1.html</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="FileUploadServlet"> File to upload1: <input type="file" name="upfile1"><br/> File to upload2: <input type="file" name="upfile2"><br/> Notes about the file: <input type="text" name="note"><br/> <br/> <input type="submit" value="Press"> to upload the file! </form> </body> </html>
二、 FileUploadServlet是一个servlet,内容如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletContext servletContext = this.getServletConfig().getServletContext(); File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); factory.setRepository(repository); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); System.out.println("name: " + name + ", value: " + value); } else { String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); File uploadedFile = new File(request.getServletContext().getRealPath("file"), fileName); System.out.println(uploadedFile.getAbsolutePath()); item.write(uploadedFile); } } } catch (Exception e) { e.printStackTrace(); } }
这里需要在部署项目的目录下面创建file文件夹,如下图。request.getServletContext().getRealPath("file")代码
spring mvc上传文件
一、在配置文件中配置上传的信息
<!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8" /> <property name="maxUploadSize" value="5000000" /> </bean>
CommonsMultipartResolver其实就是对上述的common-fileupload的一种封装。
二、在java类中: 多文件上传需要@RequestParam(value="files"),files表示定义file的name。对于formData,那就是文件的key。
public void fileUplaod(HttpServletRequest request, @RequestParam(value="files") MultipartFile[] files, HttpServletResponse response) { System.out.println(files.length); ResponseResult result = new ResponseResult(); for (MultipartFile file : files) {try { FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, file.getOriginalFilename())); } catch (IOException e1) { e1.printStackTrace(); } } Map<String, String> map = new HashMap<>(); result.setReturnCode(Constants.SUCCESS_RETURN_CODE); result.setData(map); ResponseUtils.returnResponseJsonData(response, result); }
三、为防止文件重复提交,需要比较文件的信息
String newFileContent = file.getOriginalFilename() + file.getSize(); String newEncryFile = EncryptUtils.sha1Encrypt(newFileContent); // 在实际使用中,request.getSession().getAttribute("fileCheck")是从数据库中得到的 if (newEncryFile.equals(request.getSession().getAttribute("fileCheck"))) { result.setReturnCode(Constants.FAIL_RETURN_CODE); result.setErrorMsg(ConstantsMsg.FILE_UPLOAD_REPEAT); ResponseUtils.returnResponseJsonData(response, result); return; } // ....上传完成之后,encryFile会存在数据库当中 String fileContent = file.getOriginalFilename() + file.getSize(); String encryFile = EncryptUtils.sha1Encrypt(fileContent); request.getSession().setAttribute("fileCheck", encryFile);
FileUpload的原理
后续补充
友情链接
- fileupload的官方文档:http://commons.apache.org/proper/commons-fileupload/using.html
相关文章
- Linux修改文件内容【命令】
- Struts2 文件上传
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
- MVC文件上传07-使用客户端jQuery-File-Upload插件和服务端Backload组件裁剪上传图片
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
- 3、FileInputStream--->类文件输入流(读取文件数据)
- android:Android中用文件初始化sqlite数据库
- Linux /var/log下的各种日志文件详解
- easy ui 异步上传文件,跨域
- Linux 系统必须掌握的文件_【all】
- c#上传大文件方法
- 使用xshell工具上传文件
- 零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐!(DoTween动画 | WebGL视频 | 大文件上传GitHub)
- CAD崩溃后自动保存的文件在哪里?
- 最近很火的在线文件预览txt、doc、ppt、pdf、excel、jpg、png、zip、tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写搜索引擎多关键词检索名称和内容(四)
- spring boot +ajax上传文件前后端分离完整实现示例代码