web文件上传
文件上传的步骤:
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文件上传的更多相关文章
- servlet web文件上传
web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...
- Java Web文件上传
参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...
- WEB文件上传下载功能
WEB文件上传下载在日常工作中经常用到的功能 这里用到JS库 http://files.cnblogs.com/meilibao/ajaxupload.3.5.js 上传代码段(HTML) <% ...
- Web 文件上传 目录
0. SpringMVC -- 梗概--源码--贰--上传 1. Web上传文件的原理及实现 2. Web文件上传方法总结大全 3. SpringMVC 文件上传配置,多文件上传,使用的Multipa ...
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web 最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...
- WEB文件上传漏洞介绍解决办法
引用:http://blog.csdn.net/kobejayandy/article/details/35861499 问题: -1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传 ...
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
- C#实现Web文件上传的两种方法
1. C#实现Web文件的上传 在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛. 那么使用C#如何实现文件上传的功能呢?下面笔 ...
- Java web文件上传下载
[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 邮 ...
- springboot+web文件上传和下载
一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...
随机推荐
- Windows补丁更新Tips
1.Windows 2012 R2 MS14-066补丁安装失败 现象:下载对应版本的补丁,提示“此更新不适用于你的计算机” 解决:使用命令行可成功安装 @echo off expand –F:* d ...
- 【netcore基础】ConcurrentDictionary 使用字符串作为key给代码加锁且使用EF事物防止并发调用数据混乱的问题
业务场景需要锁住指定的字符串下的代码,防止并发创建多个订单 这里我们使用 ConcurrentDictionary 首先初始化一个字典 private static readonly Concurre ...
- cdh 安装调研
解决:No module named site http://blog.csdn.net/amgang/article/details/7030642 因为安装greenplum导致yum报如下错误: ...
- 【Linux常用工具】
tmux - 终端分屏工具 man - Help cat/more/less - 文件阅读 less还具有字符串搜索功能
- nohup 部署springboot 使用命令
启动jar包:nohup java -jar news-0.0.1-SNAPSHOT.jar 查看进程:netstat -nap|grep [3389]3389 为需要查看的端口号 关闭进程:ki ...
- Trait基础
Trait基础 在Scala中,Trait是一种特殊概念.首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似.同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不 ...
- MySQL数据库导出
因为业务需要,把MySQL查询的数据导出成csv文件,操作在Navicat中完成. 首选用SELECT语句查询数据,然后Navicat的导出,然后选csv,选路径,再加上首栏就可以了
- Python学习之旅(十四)
Python基础知识(13):函数(Ⅳ) Python内置函数 1.abs:取绝对值 abs(-1) 1 2.all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None. ...
- ExecuteExcel4Macro (宏函数)使用说明
用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载) 从另外一个未打开的Excel文件中读取数据的函数 下面这个函数调用XLM宏从未打开的工作簿中读取数据. *注意: ...
- Web前端开发推荐书籍
Web前端开发推荐书籍 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 读 书吧~相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相 ...