Java Web基础之文件上传
来源:互联网 发布:安全优化版和官方原版 编辑:程序博客网 时间:2024/05/01 18:06
有时候我们要将客户端的一些数据存到服务器端,而不是直接存储到数据库中,而是要将数据存储到服务器所在的磁盘上,这就要使用文件上传。他能帮我们减少了数据库服务器的压力,对数据的操作更加灵活。
所谓的文件上传就是服务器端通过request对象获取输入流,将浏览器端上传的数据读取出来,保存到服务器端。
在使用文件上传的时候,我们应该注意两个事项,浏览器端和服务器端的一些注意事项。
浏览器端的事项
首先一个form表单,他的method请求方式必须是post请求,而且必须设置属性encType=”multipart/form-data”。当然,表单里面肯定要有个文件上传控件也就是
<input type="file" name="xxx">注意name属性一定要有且必须要有值,这就是上传前浏览器端的注意事项。
服务器端的事项
request.getParameters()获取不到上传控件的参数,这里我们要使用
Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload),下载地址点击打开链接,导入jar包后,创建DiskFileItemFactory,创建ServletFileUpload,通过ServletFileUpload的parseRequest方法得到所有的FileItem
具体步骤如下
//创建磁盘文件项工厂DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();//创建一个核心文件上传对象ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);try {//解析请求,获取所有上传组件List<FileItem> list= fileUpload.parseRequest(request);//获取每一个文件项for (FileItem fileItem : list) {//判断是否为普通组件if(fileItem.isFormField()){//是//获取组件的的name值String fieldName = fileItem.getFieldName();//获取value 其中getString为获取普通组件的值并以utf-8编码接收String value = fileItem.getString("utf-8");}else{//不是//获取文件名String filename = fileItem.getName();//获取真实名称String realName = UploadUtils.getRealName(filename);//获取随机的文件名String uuidName = UploadUtils.getUUIDName(realName);//获取文件流InputStream in = fileItem.getInputStream();//获取服务器存储路径String realPath = this.getServletContext().getRealPath("/products/1");//创建输出流FileOutputStream fos = new FileOutputStream(new File(realPath, uuidName));//拷贝IOUtils.copy(in, fos);fos.close();in.close();fileItem.delete();}}
为了防止文件名重复,我们创建了一个工具类UploadUtils,这个工具类可以直接拿来使用
public class UploadUtils {/** * 获取随机名称 * @param realName 真实名称 * @return uuid */public static String getUUIDName(String realName){//realname 可能是 1.jpg 也可能是 1//获取后缀名int index = realName.lastIndexOf(".");if(index==-1){return UUID.randomUUID().toString().replace("-", "").toUpperCase();}else{return UUID.randomUUID().toString().replace("-", "").toUpperCase()+realName.substring(index);}}/** * 获取文件真实名称 * @param name * @return */public static String getRealName(String name){// c:/upload/1.jpg 1.jpg//获取最后一个"/"int index = name.lastIndexOf("\\");return name.substring(index+1);}/** * 获取文件目录 * @param name 文件名称 * @return 目录 */public static String getDir(String name){int i = name.hashCode();String hex = Integer.toHexString(i);int j=hex.length();for(int k=0;k<8-j;k++){hex="0"+hex;}return "/"+hex.charAt(0)+"/"+hex.charAt(1);}}
阅读全文
1 0
- Java Web基础之文件上传
- Web基础之文件上传
- Java Web之七 上传文件 & 国际化
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web基础知识之文件上传
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- java web 文件上传
- java web上传文件
- Java web----文件上传
- java web 上传文件
- JAVA WEB文件上传
- java web 文件上传
- Java web文件上传
- java WEB文件上传
- java web学习基础(五) 文件上传 SmartUpload
- POJ 2159 (Ancient Cipher)
- 收藏几个模型融合的网址
- Opencv学习笔记:Mat类详解(一)
- Django21-地图
- 51Nod-1230-幸运数
- Java Web基础之文件上传
- 【补充】s3c2440启动过程详细分析
- 第三方网站QQ登录
- myeclipse和eclipse中svn插件的汉化中文和英文
- 使用forever运行nodejs应用
- 3.1Java基础语法(switch语句、循环结构)
- 希尔排序
- POJ 2533
- Android 下的四种数据存储方式