文件上传的步骤:

1.目前Java文件上传功能都是依靠Apache组织的commons-io,
 fileupload两个包来实现的;

2. http://commons.apache.org/下载io,fileupload包
 添加到项目中的WEB-INF/lib文件夹下;

3.文件上传的时候文件一般是存在服务器的upload目录下,文件名称
 存储在数据库中,为了防止上传的文件同名,我们需要动态的
 修改上传文件的名称。
 
 4.必须设计form表单类型为(请求方式为:post请求,添加属性enctype = multipart/form-data),这样这个form
 才能够支持文件上传

5.以下是具体项目的一个Servlet类,目的:把文件上传同增添功能同时进行

具体代码如下:

package com.jinzhi.web;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

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;

import com.jinzhi.bean.Book;
import com.jinzhi.bean.BookType;
import com.jinzhi.dao.BookDao;
import com.jinzhi.dao.BookTypeDao;

public class BookSave extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  BookTypeDao booktypeDao = new BookTypeDao();
  List<BookType> lst = booktypeDao.findAll();
  request.setAttribute("lstBookType", lst);
  request.getRequestDispatcher("book_save.jsp").forward(request, response);
 }

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

//设置请求的编码格式

request.setCharacterEncoding("utf-8");

//设置响应的编码格式
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  //备以封装从FileItem集合中取出的页面元素的数据
  Book book = new Book();
  //为了转换从fileItem集合中取出的日期的格式
  DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  //得到文件上传的目录(存到本地磁盘)
  String savePath = request.getSession().getServletContext().getRealPath("/upload");
  //创建本地磁盘文件工厂
  DiskFileItemFactory factory = new DiskFileItemFactory();
  //创建文件上传解析器
  ServletFileUpload sf = new ServletFileUpload(factory);
  //设置解析器的大小(一次可以解析多少文件)
  sf.setFileSizeMax(1024*1024);
  //现在所有表单元素都要通过解析器解析,所以要设置解析的编码格式
  sf.setHeaderEncoding("utf-8");
  String fileName = "";//文件名称
  
  //将得到前台所有的form表单元素,从request对象得到所有的表单元素对象
  try {
   //fileItem代表完整的input对象,而不是其他的东西(例如value值)
   List<FileItem> list = sf.parseRequest(request);
   //循环前台得到的input对象数据,判断是一般表单数据还是上传文件类型数据
   for (FileItem fileItem : list) {
    
    if(fileItem.isFormField()) {
     //判断为普通的表单数据
     //System.out.println(fileItem.getFieldName() + fileItem.getName());
     //bookName为前台页面input元素起的name值
     if("bookName".equals(fileItem.getFieldName())) {
      //加参数的String设置得到的值的编码格式
      book.setBookName(fileItem.getString("utf-8"));
     }
     if("author".equals(fileItem.getFieldName())) {
      book.setAuthor(fileItem.getString("utf-8"));
     }
     if("pbName".equals(fileItem.getFieldName())) {
      book.setPbName((fileItem.getString("utf-8")));
     }
     
     if("context".equals(fileItem.getFieldName())) {
      book.setContext((fileItem.getString("utf-8")));
     }
     if("price".equals(fileItem.getFieldName())) {
      book.setPrice(Double.parseDouble(fileItem.getString("utf-8")));
     }
     if("hyprice".equals(fileItem.getFieldName())) {
      book.setHyprice(Double.parseDouble(fileItem.getString("utf-8")));
     }
     //int类型
     if("booktypeId".equals(fileItem.getFieldName())) {
      book.setBooktypeId(Integer.parseInt(fileItem.getString("utf-8")));
     }
     if("bookstate".equals(fileItem.getFieldName())) {
      book.setBookStates(Integer.parseInt(fileItem.getString("utf-8")));
     }
     if("num".equals(fileItem.getFieldName())) {
      book.setNum(Integer.parseInt(fileItem.getString("utf-8")));
     }
     
     if("pbDate".equals(fileItem.getFieldName())) {
      //由格式化后的日期格式解析为格式化前的格式
      book.setPbdate(df.parse(fileItem.getString("utf-8")));
     }
     if("sjDate".equals(fileItem.getFieldName())) {
      //由格式化后的日期格式解析为格式化前的格式
      book.setSjdate(df.parse(fileItem.getString("utf-8")));
     }  
    } else {
     //判断为文件类型
     System.out.println(fileItem.getFieldName() + fileItem.getName());
     //得到文件名称
     String filename = fileItem.getName();
     //因为防止两次上传文件的名称相同,而导致覆盖旧文件,所以要修改名称,新文件名称
        //这里是新加的文件前缀(生成的随机数,拼成的文件前缀)   //这里是旧文件的后缀
     fileName = UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));
     //构建文件
     File file = new File(savePath + "/" + fileName);
     //写入内容
     fileItem.write(file);
     book.setBigImg(fileName);
    }
    
   }
  } catch (FileUploadException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

//调用DAO存入数据库
  new BookDao().save(book);
  response.sendRedirect("BookList");
    
  out.flush();
  out.close();
 }

}

web文件上传的更多相关文章

  1. servlet web文件上传

    web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...

  2. Java Web文件上传

    参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...

  3. WEB文件上传下载功能

    WEB文件上传下载在日常工作中经常用到的功能 这里用到JS库 http://files.cnblogs.com/meilibao/ajaxupload.3.5.js 上传代码段(HTML) <% ...

  4. Web 文件上传 目录

    0. SpringMVC -- 梗概--源码--贰--上传 1. Web上传文件的原理及实现 2. Web文件上传方法总结大全 3. SpringMVC 文件上传配置,多文件上传,使用的Multipa ...

  5. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  6. WEB文件上传漏洞介绍解决办法

    引用:http://blog.csdn.net/kobejayandy/article/details/35861499 问题: -1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传 ...

  7. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  8. C#实现Web文件上传的两种方法

    1. C#实现Web文件的上传 在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛. 那么使用C#如何实现文件上传的功能呢?下面笔 ...

  9. Java web文件上传下载

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 邮 ...

  10. springboot+web文件上传和下载

    一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...

随机推荐

  1. CocoaPods更新过程中出现的坑及解决方法

    如果CocoaPods很久没有更新,那么在search.install.update,都会强制升级他的repo,然后如果安装他正常的安装程序,从github上下的时候,你会发现,这个过程不管你FQ不F ...

  2. iOS学习之--字符串的删除替换(字符串的常用处理,删除,替换)

    字符串操作,比较简单,仅做记录! 1.删除 NSString *str1 = @"<hello,wo r d!>"; //删除字符串两端的尖括号 NSMutableSt ...

  3. ZIP解压缩工具类

    import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expan ...

  4. PHP 通过构造器进行依赖注入 demo

    class A{ public $b; public $f; function __construct( B $b , $f = 1 ){ $this->b = $b; $this->f ...

  5. geotrellis使用(四十一)流水线技术

    前言 之前 GeoTrellis 为方便用户将数据(GeoTiff 等遥感影像)导入到 backend (包含 Accumulo.File.Hadoop 等格式)中,编写了一个 ETL 类,该类的输入 ...

  6. Java远程连接redis, 报错 Connection refused: connect

    在今天的学习Redis中报错 Connection refused: connect 我总结了有三种情况: 1.远程服务器中的Redis没有开启. 2.远程连接地址出错,或者是端口出错. 3.远程服务 ...

  7. 洛谷P3369 【模板】普通平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多 ...

  8. 泡泡一分钟:Cubic Range Error Model for Stereo Vision with Illuminators

    Cubic Range Error Model for Stereo Vision with Illuminators 带有照明器的双目视觉的三次范围误差模型 "链接:https://pan ...

  9. LeetCode 520 Detect Capital 解题报告

    题目要求 Given a word, you need to judge whether the usage of capitals in it is right or not. We define ...

  10. python基础之 数据类型的补充,小数据类型

    1.id is详解 ID 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = 'nba' print(id(name)) # 158583 ...