首页 > 经验记录 > Java web实现文件上传

Java web实现文件上传

 
平时使用的表单提交时,他的enctype是使用的”application/x-www-form-urlencoded”这种格式上传到你的servlet。
在上传文件时,也就是说type==file并且需要提交时,就需要把他变成二进制流的这种编码格式。需要设置成“multipart/form-data”。但是,使用这种格式也会有问题
用这种格式可以用来上传文件,但是其他普通的表单元素还是需要用urlencoded这种编码格式。
这种时候可以写两个表单提交,给file类型的表单元素单独提交
想要俩一起提交,可以给每个表单元素一个ID值,使用JS 的方式提交
 
使用js提交,分别取出表单元素的value值,然后获取表单这个对象本身,定好它的action,自己把其获取的表单元素给拼进url
在手动调用其submit方法提交这个表单。Submit提交的是二进制流数据
(Js取file类型表单元素的value值取到得是文件名字)
 
在servlet里面先获取所有提交上来的表单元素,把他们封装为一个对象先保存进数据库,在进行文件上传的处理
文件提交进servlet的时候,文件会存在一个临时目录里边,我们要做的就是把它从临时目录里移动到web项目的指定位置。此时可以使用jspsmartupload这个jar包。
 
 
有一个叫做SmartUoload的工具类,先把他实例化出来,在调用其配置方法。获取Servlet的配置环境和请求响应参数传给他。实现对其的初始化
 
初始化完成后,使用它的upload方法,这时候就可以另存文件了。
 
再从里面getFiles出来,得到一个Files的集合(此Files是jspsmartupload里面的Files,不是IO包里的)
 
遍历这个文件集合得到一个个File,获取要保存进的文件夹的绝对路径。在获取上传文件的文件名,通过文件名得到后缀名。通过字符串拼接给他一个新名字。
 
在使用saveAs另存为一下。里面传入之前获取的:绝对路径+”/”+新名字。将文件保存进指定目录
 
最后需要把存在于服务器的文件给同步到工作空间,这样就不会在重新部署项目的时候出现文件丢失的问题。所以在做完之后,最好是去服务器的根目录拷贝一下。
 
 

Product product=new Product();
try {
BeanUtils.populate(product, req.getParameterMap());
//返回新添加商品的主键值
int pid=dao.addProduct(product);
SmartUpload su=new SmartUpload();
//初始化上传api
su.initialize(getServletConfig(), req, resp);
su.upload();//另存文件
//获取上传文件的集合
Files files=su.getFiles();
//遍历集合
for(int i=0;i<files.getCount();i++) {
//获取单个文件
File file=files.getFile(i);
//获取images文件夹在服务器的绝对路径
String path=req.getServletContext().getRealPath("images");
//获取上传文件的文件名
String name=file.getFileName();
//获取上传文件的后缀名
String suffix=name.substring(name.lastIndexOf("."));
String newName=pid+"_"+i+suffix;
//将文件保存到指定目录
file.saveAs(path+"/"+newName);
product.setPid(pid);
product.setPicture(newName);
}

 

           


EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00