upload三种上传方式(上)----Servlet----post----commons-fileupload-1.2.1.jar方式请求上传文件
来源:互联网 发布:python爬虫入门教程 编辑:程序博客网 时间:2024/05/17 23:35
上传前进行的配置选项:
1、在下方的Servers中,右键你的tomcat–open,选中下面两个配置。
第一个:Serve modules without publishing
作用:tomcat默认时,会将你的项目拷贝至tomcat中的Server path目录下进行部署运行,当选中该配置后,则会使用你的项目位置部署运行。(补充:在上方Server Locations配置中,我选中的是第二个,所以会在K:\apache-tomcat-8.0.37-windows-x64\apache-tomcat-8.0.37\wtpwebapps\mystudy..进行部署运行,如果是选中默认第一个,则会拷贝该项目在tomcat中的.metadada目录中复制一个并进行部署运行)
例如:未勾选时,我的tomcat的默认部署路径为K:\apache-tomcat-8.0.37-windows-x64\apache-tomcat-8.0.37\wtpwebapps\mystudy..,勾选后,我的tomcat的部署路径为K:\shxtsx\xmgc\mystudy..
(补充:tomcat自带重新部署的功能,即reloadable=true,如果reloadable=false,只是在项目修改后不会自动重新部署,但是resatrt或者关闭eclipse,再重新打开,它还是会重新部署,因此,当上传的文件放在tomcat的目录路径下时,无论怎样都会消失,所以最好的方式是将上传的文件存放到项目目录下)
第二个:Publish module contexts to separate XML files
作用:将你的Server下面的server.xml中的<context>
属性分离出来,在你的tomcat->conf->Catalina->localhost
中生成一个与你项目对应的xml文件(补充:其名称与你项目的发布根路径名称相同,即<context path="">
中path属性的值)
作用:在低版本的tomcat(补充:我从7.0开始用的,所以很少见到)中,如果不勾选该配置,则会出现红色的警告[警告: [SetPropertiesRule] Setting property ‘source’ to ‘org.eclipse.jst.jee.server:TestTomcat6.0.16’ did not find a matching property. ],同时,对于项目的管理也更加的方便。
2、上传所使用的包
Commons-fileupload-xx.jar
Commons-io-xx.jar
网盘链接:http://pan.baidu.com/s/1i5EK9Sh
密码:br2e
(补充:我用的是1.2.1版本)
一、传统Servlet—post请求上传方式,使用的是DiskFileItemFactory和ServletFileUpload
Servlet代码:(全部是org.apache.commons.fileupload.**下面的)
package com.yong.upload;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class FileUpload */@WebServlet("/FileUpload")public class FileUpload extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //硬盘文件项工厂--把IO流转换成临时文件 DiskFileItemFactory factory = new DiskFileItemFactory(); //servlet文件上传 ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> list = upload.parseRequest(request); if(list.size()>0){ //获取流字符串 String message = list.get(0).getString("UTF-8"); response.setContentType("text/html;charset=utf-8"); response.getWriter().print(message); //由于每次上传只能上传一个文件,因此直接在list中get(0)就能获得上传的该文件。 FileItem item = list.get(1); //获取文件后缀名 String fileExtraName = item.getName().substring(item.getName().lastIndexOf(".")); //生成新的文件名 String newFileName = UUID.randomUUID().toString()+fileExtraName; //上传路径 String path = request.getRealPath("file"); System.out.println(path); //生成文件 File file = new File(path,newFileName); InputStream ins = item.getInputStream(); FileOutputStream fos = new FileOutputStream(file); byte[] b = new byte[1024]; while(true){ int n = ins.read(b); if(n == -1){ break; } //写入服务器 fos.write(b,0,n); } ins.close(); fos.close(); } } catch (FileUploadException e) { e.printStackTrace(); System.out.println("上传失败!"); } }}
jsp页面代码:
<form action="FileUpload" method="post" enctype="multipart/form-data"><input type="text" name="message"><input type="file" name="file" id="file" value="aaa"><button type="submit">注册</button></form>
操作流程总结:
第一步:配置环境
(1)勾选两个配置信息
(2)引入 commons-fileupload-1.2.1.jar 和 commons-io-1.2.1.jar 两个jar包
第二步:编写jsp文件
(1)注意在input中加入“enctype=’multipart/form-data’”属性
(2)method=’post’ 使用post请求
第三步:编写servlet.java
(1)创建servlet.java命名为FileUploadServlet.java
创建 DiskFileItemFactory factory = new DiskFileItemFactory();
创建 ServletFileUpload upload = new ServletFileUpload(factory);
使用upload解析reqeust请求传过来的数据 upload.parseRequest(request);类型为list
如果你的<input type='file'>
是第一个,则使用list.get(0)来获取,结果为FileItem类型
最后以流的形式读数据后再写入磁盘中,大功告成。
- upload三种上传方式(上)----Servlet----post----commons-fileupload-1.2.1.jar方式请求上传文件
- java文件上传(使用commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar)
- 文件上传 commons-fileupload.jar
- Servlet上传文件,commons-fileupload
- 使用commons-fileupload.jar servlet上传文件 遇到的问题
- java 上传包 commons-fileupload-1.2.jar处理上传文件
- java 上传包 commons-fileupload-1.2.jar处理上传文件
- flex 利用commons-fileupload.jar 上传文件时 乱码解决方式
- apache commons fileupload 处理文件上传的两种方式(流式和非流式)
- 用apache文件上传组件commons-io-2.4.jar commons-fileupload-1.2.1.jar进行文件上传
- commons-fileupload.jar上传文件时出错
- commons-fileupload.jar实现文件上传
- commons-fileupload.jar实现文件上传
- Servlet利用Commons FileUpload实现文件上传
- commons-fileupload+servlet实现简单文件上传
- servlet+uploadify+commons-fileupload实现文件上传
- Servlet使用commons-fileupload实现文件上传
- java commons-fileupload servlet 多文件上传
- 连续总结第三十二天
- ArcGIS API for JavaScript 通过identifyTask实现按区域选取截图
- 计算两整数的最大值
- 蓝桥杯 历届试题 核桃的数量
- java串口调试助手
- upload三种上传方式(上)----Servlet----post----commons-fileupload-1.2.1.jar方式请求上传文件
- 杭电ACM OJ 1013 Digital Roots 如何用递归优雅地把一个未知长度的长整数的每一位拆分出来
- 招聘会感悟
- pots
- Magento利用价格(price)筛选商品
- HDU2149 巴什博弈
- GreenDao的使用以及断点续传
- 懒汉式单例模式和饿汉式单例模式的区别
- 滑动fragment的两种方法