Java实现多文件上传功能


Posted in Java/Android onJune 30, 2021

文件上传是开发中十分常见的功能,在servlet3.0之前,实现文件上传需要使用一些插件技术,比如:

  • commons-fileupload
  • smartupload

但是在3.0之后servlet内部集成文件上传的技术(multipart),有关servlet3.0文件上传的实现过程如下:

1、表单的提交方式必须设置为post
2、表单的enctype必须设置为multipart/form-data(使用二进制流的方式提交数据)
3、在servlet类中加上@MultipartConfig注解

包含四个可设置的参数分别为:

  • fileSizeThreshold 内存缓存的最大空间(当上传文件的字节数达到该值后使用临时文件缓存)
  • location 临时文件的存储目录
  • maxFileSize 允许上传的单个文件的最大限制
  • maxRequestSize 表单允许提交的总字节数

页面端

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <form action="upload3" method="post" enctype="multipart/form-data">
  <input type="text" name="fname" placeholder="请输入文件名" /> <br />
  <input type="file" name="myfile" multiple/>
  <button>上传</button>
 </form>
</body>
</html>

服务端

package com.softeem.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet({ "/UploadServlet", "/upload" })
@MultipartConfig(
  //设置内存缓存的最大空间(当上传文件的字节数达到该值后使用临时文件缓存)
  fileSizeThreshold=1024*1024,
  //设置临时文件的存储目录
  location="d:/temp",
  //设置允许上传的单个文件的最大限制
  maxFileSize=1024*1024*200,
  //设置表单的最大允许提交的字节数
  maxRequestSize=1024*1024*500
  )
public class UploadServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
  String basePath = "d:/myfileserver";
  Collection<Part> parts = request.getParts();
  for(Part part:parts){
   if(part.getSize() > 0){
    String fname = part.getSubmittedFileName();
    //随机产生一个uuid作为文件名称
    String uuid = UUID.randomUUID().toString();
    //获取文件后缀
    String suffix = fname.substring(fname.lastIndexOf("."));
    //组合uuid和文件后缀成为新的文件名称
    fname = uuid+suffix;
    
    part.write(basePath+File.separator+fname);
   }
  }
 }
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }

}

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

Java/Android 相关文章推荐
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
Aug 02 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Android Studio 计算器开发
May 20 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
Java基础之线程锁相关知识总结
Jun 30 #Java/Android
详解Spring事件发布与监听机制
浅谈自定义校验注解ConstraintValidator
ObjectMapper 如何忽略字段大小写
Java常用函数式接口总结
分析并发编程之LongAdder原理
SpringBoot整合JWT的入门指南
You might like
Terran热键控制
2020/03/14 星际争霸
基于mysql的bbs设计(二)
2006/10/09 PHP
15种PHP Encoder的比较
2007/04/17 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
jquery等待效果示例
2014/05/01 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
python自动发送邮件脚本
2018/06/20 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python读写csv文件实例代码
2019/07/05 Python
python3 map函数和filter函数详解
2019/08/26 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
销售行政专员岗位职责
2014/06/10 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
MYSQL常用函数介绍
2022/05/05 MySQL