文件上传 - JAVA原生
来源:互联网 发布:spss调查问卷数据录入 编辑:程序博客网 时间:2024/05/01 03:03
DiskFileItemFactory类
将请求消息实体中的每一个项目封装成单独的 (FileItem接口的实现) 对象的任务
由 org.apache.commons.fileupload.FileItemFactory 接口的默认实现
org.apache.commons.fileupload.disk.DiskFileItemFactory 来完成。当上传的文件项目比较小时,直接保存在内存中(速度比较快),比较大时,以临时文件的形式,保存在磁盘临时文件夹(虽然速度慢些,但是内存资源是有限的)。
ServletFileUpload 类
org.apache.commons.fileupload.servlet.ServletFileUpload类是Apache文件上传组件处理文件上传的
核心高级类(所谓高级就是不需要管底层实现,暴露给用户的简单易用的接口)。
使用其 parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回。使用该方法处理上传文件简单易用。
FileItem
FileItem类用来封装单个表单字段元素的数据,一个表单字段元素对应一个FileItem对象,通过调用FileItem对象的方法可以获得相关表单字段元素的数据。FileItem是一个接口,在应用程序中使用的实际上是该接口一个实现类,该实现类的名称并不重要,程序可以采用FileItem接口类型来对它进行引用和访问,为了便于讲解,这里将FileItem实现类称之为FileItem类。FileItem类还实现了Serializable接口,以支持序列化操作。
【1】后台Servlet
package com.file.servlet;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.io.Reader;import java.util.List;import javax.servlet.ServletException;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;public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text;charset=UTF-8"); /*使用输入流读取*/// String file = request.getParameter("file");// String desc = request.getParameter("desc");// System.out.println(file+","+desc);// InputStream in2 = request.getInputStream();// Reader reader = new InputStreamReader(in2);// BufferedReader bufferedReader = new BufferedReader(reader); /*逐行读出*/// String str = null;// if ((str = bufferedReader.readLine())!=null) {// System.out.println(str);// // } /*1.得到FiletItem的集合Items*/ DiskFileItemFactory factory = new DiskFileItemFactory(); /*设置单位文件最大500K,只要超过500k,将会先上传到临时目录下面*/ factory.setSizeThreshold(1024*500); /*创建临时目录*/ File temDirectory = new File("d:\\temDirectory"); if (!temDirectory.exists()) { temDirectory.mkdir(); } //设置临时目录 factory.setRepository(temDirectory); /*create a new file upload handler*/ ServletFileUpload upload = new ServletFileUpload(factory); /*the all max to be 10M*/ upload.setSizeMax(1024*1024*10); /*2.遍历items,若是一个一般的表单域,打印信息;若是文件域保存到硬盘一个位置*/ try { List<FileItem> items = upload.parseRequest(request); for(FileItem item:items){ if (item.isFormField()) { /*获取文件原始名*/ //String name = item.getName(); /*获取表单域中的文件名*/ String filedName1 = item.getFieldName(); String value = item.getString(); System.out.println(filedName1+"--"+value); }else { //获取表单中标签的name属性值 String filedName = item.getFieldName(); //获取表单中上传的文件名 String fileName = item.getName(); /*若返回的为路径+文件名,则需要截取*/ int index=fileName.lastIndexOf("\\"); //System.out.println(index); if(index!=-1) { /*从索引出开始知道字符串末尾 索引从“0”开始*/ fileName=fileName.substring(index+1); } String contentType = item.getContentType(); long sizeInBytes = item.getSize(); System.out.println("filedName :"+filedName); System.out.println("fileName :"+fileName); System.out.println("contentType :"+contentType); System.out.println("sizeInBytes :"+sizeInBytes); /*从item拿到输入流*/ InputStream in = item.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; /*也可称为filePath,文件保存到磁盘的路径+名字*/ //上传到本机D盘 //fileName = "d:\\files\\"+fileName; //上传服务器目录下D:\apache-tomcat-7.0.40\webapps\JAVAWeb-FileUpload\resources\1.jpg String path = getServletContext().getRealPath("/"); fileName = path+"resources\\"+fileName; //上传到本机D盘 D:\\upload\resources //fileName = "D:\\upload\\resources\\"+fileName; //此时jsp若想请求该图片,则需要在Tomcat做目录映射,请查阅目录映射资料 System.out.println(fileName); /*获取输出流并读出到files目录下*/ File fileCreate = new File(fileName); File pFileCreate = fileCreate.getParentFile();// System.out.println("fileCreate.getParent(),"+fileCreate.getParent());// System.out.println("fileCreate.getPath(),"+fileCreate.getPath());// System.out.println("fileCreate.getParentFile(),"+pFileCreate); /* * fileCreate.getParent(),d:\files fileCreate.getPath(),d:\files\1.jpg fileCreate.getParentFile(),d:\files */ //judge the parent path exist,if not ,create it ! if (!pFileCreate.exists()) { pFileCreate.mkdirs(); }// if (!fileCreate.exists()) {// fileCreate.createNewFile();// } OutputStream out = new FileOutputStream(fileCreate); /*从输入流读到buffer里面,一次1024个字节*/ while((len = in.read(buffer))!=-1){ out.write(buffer,0,len); } /*关闭输入输出流*/ out.close(); in.close(); //设置编码,避免上传成功出现乱码 response.setContentType("text/html; charset=utf-8"); PrintWriter outWriter = response.getWriter();// outWriter.print("<script>alert('上传成功');</script>"); //上传成功后返回到index页面 outWriter.print("<script>alert('上传成功');window.location.href='index.jsp';</script>"); outWriter.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } }}
【2】JSP页面
<form action="uploadServlet" method="post" enctype="multipart/form-data"> File:<input type="file" name="file"/> Desc:<input type="text" name="desc"/><br><br> <input type="submit" value="Submit"/> </form>
【3】result
- 文件上传 - JAVA原生
- 原生JS上传文件(java)
- springmvc文件上传(原生)
- PHP原生--文件上传
- H5原生文件上传
- 原生上传文件
- php原生文件上传
- 原生方式上传文件
- 文件上传(二)原生一般文件上传
- 原生js异步文件上传
- php 原生的文件上传
- 使用原生HTML5上传文件
- 原生ajax实现文件上传
- 微擎原生上传文件
- 文件上传(一)原生文本文件上传
- 文件下载 - JAVA原生
- 原生java http方式上传大文件(含 文件流分段上传问题、base64分段转码问题解决思路)
- NSURLConnection(苹果原生上传单文件)
- html css层叠样式基础(内联元素和块元素)(二)
- const类对象和const成员函数的用法及编程技巧
- ueditor常见用法
- centos 7上nginx+uwsgi 性能调优
- poj 3186
- 文件上传 - JAVA原生
- 构造方法类的反射机制
- MySQL日期和时间处理函数应用总结
- [BZOJ3144][Hnoi2013]切糕(最小割)
- android 开发零起步学习笔记(二十八):15 个 Android 通用流行框架大全
- 【JAVA】struts的property用法
- 【BZOJ 2186】[Sdoi2008]沙拉公主的困惑 欧拉函数
- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a
- Centos7 网络配置