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 相关文章推荐
Java新手教程之ArrayList的基本使用
Jun 20 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
java基础——多线程
Jul 03 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
Jul 16 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
Apr 08 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
Java基础之线程锁相关知识总结
Jun 30 #Java/Android
详解Spring事件发布与监听机制
浅谈自定义校验注解ConstraintValidator
ObjectMapper 如何忽略字段大小写
Java常用函数式接口总结
分析并发编程之LongAdder原理
SpringBoot整合JWT的入门指南
You might like
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
Python turtle库的画笔控制说明
2020/06/28 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
中学自我评价
2014/01/31 职场文书
2014年会策划方案
2014/05/11 职场文书
公司租车协议书
2015/01/29 职场文书
创业计划书之熟食店
2019/10/16 职场文书
Node.js实现断点续传
2021/06/23 Javascript
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android