web基础---->Fileupload文件的上传
这里我们介绍文件上传的知识,使用的是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
web基础---->Fileupload文件的上传的更多相关文章
- .NET Core Web APi大文件分片上传研究
前言 前两天发表利用FormData进行文件上传,然后有人问要是大文件几个G上传怎么搞,常见的不就是分片再搞下断点续传,动动手差不多也能搞出来,只不过要深入的话,考虑的东西还是很多.由于断点续传之前写 ...
- web.config修改文件修改上传大小
老是要修改上传文件大小的限制,先记在这里. <httpRuntime maxRequestLength= "1048576 " //最大长度 executionTimeout ...
- Java WEB ----- 文件的上传
最近学到的web阶段的文件的上传,就想记录一下,帮助自己复习以及帮助大家学习,一般我都会把上传的文件存到服务器中的web-inf 下面,因为这样用户不会直接访问到,我们存到数据库的一般都是路径.这里没 ...
- 步步为营-70-asp.net简单练习(文件的上传和下载)
大文件的上传一般通过FTP协议,而一般小的文件可以通过http协议来完成 1 通过asp.net 完成图片的上传 1.1 创建html页面 注意:1 method="post" ; ...
- 文件的上传Commons FileUpload(web基础学习笔记十六)
一.表单设置 <form action="<%=request.getContextPath()%>/jsp/admin/doAdd.jsp" enctype=& ...
- 初学Java Web(7)——文件的上传和下载
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...
- java web(四):request、response一些用法和文件的上传和下载
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
- web操作文件的上传到服务器 并可下载 并且读取出来
1.文件的上传-servlet实现文件上传---核心API—DiskFileItemFactory 一.文件上传概述 l 实现web开发中的文件上传功能,需完成如下二步操作: • 在web页面 ...
- Web大文件(夹)上传(断点续传)控件-Xproer.HttpUploader6
版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
随机推荐
- Linux 网络子系统之NAPI书签
只是一个书签 http://blog.csdn.net/ustc_dylan/article/details/6116334
- http抓包工具
fiddler 可以用该工具抓包并修改对应的参数数据
- 使用Ant编译Hadoop工程报错
在win7用Ant编译hadoop工程的时候,遇到了一个报错,如下: org.eclipse.core.runtime.CoreException: D:\workspace\hadoop-1.1.2 ...
- jsp页面积累
out.print(页面html);response.setContexttype("");以页面的形式展现java
- (二)使用预定义模型 QStringListModel例子
使用预定义模型 QStringListModel例子 源代码如下 Main.cpp #include <QApplication> #include "teamleadersdi ...
- 如何查询表A中的某字段的值在表B中不存在?
1.测试表创建,插入数据: create table a (id int, name )); create table b (id int); ,'a'); ,'b'); ,'c'); ,'d'); ...
- js中以键值对的形式当枚举
js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...
- 【Java集合的详细研究7】Set和List 的关系与区别
两个接口都是继承自Collection. List (inteface) 次序是List 的最重要特点,它确保维护元素特定的顺序. --ArrayList 允许对元素快速随机访问. --LinkedL ...
- pclzip 压缩文件与解压
类PclZip.class.php下载:PclZip.rar<?php header("Content-type: text/html; charset=utf-8"); f ...
- 【Deep learning】NLP
http://www.tuicool.com/articles/EvaQJnJ http://cs224d.stanford.edu/syllabus.html