Java实现多文件上传功能
程序员文章站
2022-04-06 13:26:35
文件上传是开发中十分常见的功能,在servlet3.0之前,实现文件上传需要使用一些插件技术,比如: commons-fileupload smartupload 但是在3.0之后s...
文件上传是开发中十分常见的功能,在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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。