博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web文件上传
阅读量:5111 次
发布时间:2019-06-13

本文共 4816 字,大约阅读时间需要 16 分钟。

文件上传的步骤:

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();
 }

}

转载于:https://www.cnblogs.com/StephenChowcai/p/7420190.html

你可能感兴趣的文章
大道至简 第四章 读后随笔
查看>>
[Java] 資料輸入的差異性(System.in、BufferedReader、Scanner)
查看>>
【Internet History, Technology, and Security】第六讲心得
查看>>
关于JAVA
查看>>
2019年,如何从小白升级到大牛程序员呢?
查看>>
Android jni 编程4(对基本类型二维整型数组的操作)
查看>>
G家二面
查看>>
poj 2109 Power of Cryptography (double 精度)
查看>>
C语言基础课第四次作业
查看>>
android基础篇:提示框AlertDialog实例
查看>>
【linux】如何查看文件的创建、修改时间
查看>>
Mercurial 的hook使用
查看>>
NLog文章系列—系列文章目录以及简要介绍
查看>>
Java EE之Struts2-2.5配置
查看>>
[ACM_数据结构] Color the ball [线段树水题][数组开大]
查看>>
[ACM_动态规划] 数字三角形(数塔)
查看>>
css中的em 简单教程 -- 转
查看>>
文档的特定位置替换字串
查看>>
Python成长笔记 - 基础篇 (四)函数
查看>>
汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no、dept_name、其当前员工所有的title以及该类型title对应的数目count...
查看>>