FileUpload组件
- package com.itheima.servlet;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- 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.FileUploadBase;
- import org.apache.commons.fileupload.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.apache.commons.io.FilenameUtils;
- import com.itheima.util.IdGenertor;
- public class UploadServlet3 extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
- //检测form是否是multipart/form-data类型的
- boolean isMultipart = ServletFileUpload.isMultipartContent(request);
- if(!isMultipart){
- throw new RuntimeException("The form's enctype attribute value must be multipart/form-data");
- }
- //解析请求内容
- DiskFileItemFactory factory = new DiskFileItemFactory();//产生FileItem的工厂
- factory.setRepository(new File("d:/"));//指定临时文件的存放目录
- ServletFileUpload sfu = new ServletFileUpload(factory);
- // sfu.setFileSizeMax(3*1024*1024);//单个文件大小限制
- // sfu.setSizeMax(5*1024*1024);//总文件大小
- List<FileItem> items = new ArrayList<FileItem>();
- try {
- items = sfu.parseRequest(request);
- }catch(FileUploadBase.FileSizeLimitExceededException e) {
- response.getWriter().write("单个文件不能超过3M");
- }
- catch(FileUploadBase.SizeLimitExceededException e) {
- response.getWriter().write("总文件不能超过5M");
- }catch (FileUploadException e) {
- e.printStackTrace();
- throw new RuntimeException("解析请求失败");
- }
- //遍历:
- for(FileItem item:items){
- //处理普通字段
- if(item.isFormField()){
- processFormField(item);
- }else{
- //处理上传字段
- processUploadField(item);
- }
- }
- }
- protected void processUploadField(FileItem item) {
- try {
- // InputStream in = item.getInputStream();
- //找一个存放文件的位置;存放的文件名
- String fileName = item.getName();//上传的文件的文件名 C:\Users\wzhting\Desktop\a.txt a.txt(浏览器不同)
- if(fileName!=null&&!fileName.equals("")){
- //限定上传文件的类型
- if(!item.getContentType().startsWith("image")){
- return;
- }
- fileName = FilenameUtils.getName(fileName);
- fileName = IdGenertor.genGUID()+"_"+fileName;
- //存放路径
- String realPath = getServletContext().getRealPath("/WEB-INF/files");
- //生成一个子目录
- String childDirectory = genChildDirectory(realPath,fileName);
- File storeDirectory = new File(realPath+File.separator+childDirectory);
- if(!storeDirectory.exists()){
- storeDirectory.mkdirs();
- }
- // OutputStream out = new FileOutputStream(new File(storeDirectory, fileName));
- //
- // int len = -1;
- // byte b[] = new byte[1024];
- // while((len=in.read(b))!=-1){
- // out.write(b, 0, len);
- // }
- // in.close();
- // out.close();
- //
- // item.delete();//清除临时文件
- item.write(new File(storeDirectory, fileName));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private String genChildDirectory(String realPath, String fileName) {
- int hashCode = fileName.hashCode();
- int dir1 = hashCode&0xf;
- int dir2 = (hashCode&0xf0)>>4;
- String str = dir1+File.separator+dir2;
- File file = new File(realPath,str);
- if(!file.exists()){
- file.mkdirs();
- }
- return str;
- }
- //按照日期生成子目录
- private String genChildDirectory(String realPath) {
- Date now = new Date();
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- String str = df.format(now);
- File file = new File(realPath,str);
- if(!file.exists()){
- file.mkdirs();
- }
- return str;
- }
- protected void processFormField(FileItem item) {
- //打印到控制台
- String fieldName = item.getFieldName();
- String fieldValue = "";
- try {
- fieldValue = item.getString("UTF-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- System.out.println(fieldName+"="+fieldValue);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
FileUpload组件的更多相关文章
- .JavaWeb文件上传和FileUpload组件使用
.JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...
- Primefaces的fileUpload组件使用
最近在学习Primefaces(当然也是项目中需要用的).在使用其fileUpload遇到了不小的困难,现总结一下供大家及我自己今后参考使用. 1.首先是使用环境配置:正常的Primefaces开发环 ...
- 文件上传使用FileUpload组件进行代码实现
使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...
- 实现文件上传功能(FileUpload组件)
文件上传: 项目中经常用到文件上传. 自己实现文件上传,使用文件上传组件fileupload组件 1.指定表单类型为文件上传, enctype=”multipart/form-data” 2.提交方式 ...
- 使用 fileupload 组件完成文件的上传应用
1. 使用 fileupload 组件完成文件的上传应用 commons-dbutils-1.3.jarcommons-fileupload-1.2.1.jar 1). 需求: > 在 uplo ...
- JSP文件上传--FileUpload组件
如果使用上传操作,并且没有使用框架之类,最好使用Smartupload,因为FileUpdate太难使用. 下载组件: fileupload包:http://commons.apache.org/pr ...
- 使用fileupload组件
1. 进行文件上传时, 表单需要做的准备: 1). 请求方式为 POST: <form action="uploadServlet" method="post&qu ...
- 模拟文件上传(三):使用apache fileupload组件进行文件批量上传
其中涉及到的jar包 jsp显示层: <%@ page language="java" import="java.util.*" pageEncoding ...
- 模拟文件上传(二):使用apache fileupload组件进行文件上传
其中涉及到的jar包: jsp显示层: <%@ page language="java" import="java.util.*" pageEncodin ...
随机推荐
- js 字符串中的\n不会换行
var str1=aaaaaaa\nbbbbbbb; alert(str1); //不换行 ???不知所以然 解决办法: while (str1.indexOf("\\n") & ...
- Kinect的那些事儿
Kinect结合Unity3d跑酷游戏体感Demo 今天收拾东西,在柜子的翻出了一台崭新的Kinect,说起来真是惭愧,大学毕业那会儿,慈老师(和名字一位慈祥的好老师,也是我的毕业设计指导老师)赞 助 ...
- DataTable 的使用
DataTable CFHMXdt = new DataTable(); CFHMXdt.Columns.Add("group", typeof(System.String)); ...
- 非递归创建二叉树( C++队列 )
非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 f ...
- php排序
关于order by排序:单条件排序:order by id(按照id排序默认从小到大) order by id desc(按照id排序从大到小) 多条件排序:order by date,id(先按照 ...
- Ubuntu14.04安装wineqq国际版
一开始,我在Ubuntu14.04下安装的QQ版本是WineQQ2013SP6-20140102-Longene, 但后来发现这个版本QQ在linux下问题很多,比如不能用键盘输入密码,QQ表情 ...
- jQuery实现的简单小功能(实用)
1.返回顶部使用JQuery的animate和scrollTop方法可以创建简单地返回顶部的动画: // Back to top $('#top').click(function (e) { e.pr ...
- SQLite的原子提交原理
本文描述了sqlite为保证数据库文件不被损坏而采取的种种手段.. 以下是原译者的摘要:http://www.kuqin.com/shuoit/20150618/346693.html 摘要: 本文源 ...
- SQL语法整理
SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...
- try{}、catch(){}、throw语句
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...