jsp上传下载上篇
来源:互联网 发布:wamp mysql 无法启动 编辑:程序博客网 时间:2024/05/18 03:46
文件上传到本地磁盘同时将信息出入数据库:
上传JSP页面中利用js能添加多个文件同时上传:
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>上传页面</title>
- <script type="text/javascript">
- function addfiles(){
- var filesDiv = document.getElementById("files");
- var fileInput = document.createElement("input");
- fileInput.type="file";
- fileInput.name="浏览";
- var delButton = document.createElement("input");
- delButton.type="button";
- delButton.value="删除";
- delButton.onclick=function del(){
- this.parentNode.parentNode.removeChild(this.parentNode);
- }
- var div = document.createElement("div");
- div.appendChild(fileInput);
- div.appendChild(delButton);
- filesDiv.appendChild(div);
- }
- </script>
- </head>
- <body>
- <form action="${pageContext.request.contextPath }/uploadServlet.do" method="post" enctype="multipart/form-data">
- <table>
- <tr>
- <td>用户名:</td><td><input type="text" name="username"/></td><td></td>
- </tr>
- <tr>
- <td></td><td><input type="button" value="添加文件" onclick="addfiles()"/></td><td></td>
- </tr>
- <tr>
- <td></td><td><input type="file" name="浏览"/></td><td></td>
- </tr>
- <tr>
- <td></td><td><div id="files"></div></td><td></td>
- </tr>
- <tr>
- <td></td><td><input type="submit" value="上传"/></td><td></td>
- </tr>
- </table>
- </form>
- ${message}
- </body>
- </html>
最终要的是servlet中
- package cn.csdn.web.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.sql.Blob;
- import java.sql.SQLException;
- 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 javax.sql.rowset.serial.SerialBlob;
- import javax.sql.rowset.serial.SerialException;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
- import org.apache.commons.fileupload.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import sun.print.resources.serviceui;
- import cn.csdn.web.dao.UploadDao;
- import cn.csdn.web.dao.UploadDaoImpl;
- import cn.csdn.web.domain.Upload;
- public class UploadFilesServlet extends HttpServlet {
- /**
- * @author sword
- */
- private static final long serialVersionUID = 1L;
- UploadDao uDao = new UploadDaoImpl();
- Upload entity = new Upload();
- @SuppressWarnings({ "unchecked", "unchecked" })
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("utf-8");
- try {
- //1、创建工厂对象
- DiskFileItemFactory factory = new DiskFileItemFactory();
- //2、设置临时文件路径
- factory.setRepository(new File("d:\\test"));
- //3、得到上传文件解析器
- ServletFileUpload upload = new ServletFileUpload(factory);
- //4、处理乱码问题
- upload.setHeaderEncoding("utf-8");
- //5、设定文件上传大小限制
- //upload.setSizeMax(1024*1024);
- //6、进行解析 得到存放FileItem的List对象
- List<FileItem> list ;
- list = upload.parseRequest(request);
- for(FileItem item : list){
- if(item.isFormField()){
- String paramName = item.getFieldName();
- String paramValue = item.getString("utf-8");
- System.out.println("普通输入项" + paramName + " = " + paramValue);
- entity.setName(paramValue);
- }else{
- //获取上传文件名
- String fileName = item.getName();
- //如果文件名有目录,则去掉目录部分,只保留文件名
- fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
- System.out.println("name = " + fileName);
- if(!fileName.equals("")){
- //处理同名问题 名字前加UUID处理 调用refactorFile方法
- String uuidName = refactorFileName(fileName);
- System.out.println("uuidName==="+uuidName);//测试代码
- entity.setFileName(uuidName);//将信息存入到数据库中
- InputStream is = item.getInputStream();
- //上传文件位置生成指定的二级路径 调用方法
- String basepath = this.getServletContext().getRealPath("WEB-INF/upload");
- String finalPath = generateFilePath(basepath,uuidName);//文件的完整路径+名字+后缀
- String finalName = finalPath.substring(finalPath.indexOf("_")+1);//得到文件的真实名字
- System.out.println("finalName==="+finalName);
- entity.setFilePath(finalPath);//将信息存入到数据库中
- entity.setFile(item.get());//将上传文件存入到数据库中
- File file = new File(finalPath);
- FileOutputStream fos = new FileOutputStream(file);
- byte[] buffer = new byte[1024];
- int len = 0;
- while((len=is.read(buffer))!=-1){
- fos.write(buffer, 0, len);
- }
- uDao.insert(entity);
- fos.flush();
- fos.close();
- is.close();
- item.delete();
- request.setAttribute("message", "文件上传成功");
- }
- }
- }
- }catch(FileSizeLimitExceededException e1){
- e1.printStackTrace();
- request.setAttribute("message", "上传文件尺寸太大!!!");
- }catch(FileUploadException e){
- e.printStackTrace();
- request.setAttribute("message", "bbbb文件上传失败");
- }
- request.getRequestDispatcher("/upload.jsp").forward(request, response);
- }
- private String generateFilePath(String basepath, String uuidName) {
- int hashcode = uuidName.hashCode();
- int dir1 = hashcode & 0xf;
- int dir2 = (hashcode >> 4) & 0xf;
- String path = basepath+"\\"+dir1+"\\"+dir2+"\\";
- File f = new File(path);
- if(!f.exists()){
- f.mkdirs();
- }
- return path+uuidName;
- }
- private String refactorFileName(String fileName) {
- return UUID.randomUUID().toString()+"_"+fileName;
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- jsp上传下载上篇
- JSP上传下载
- jsp上传下载
- jsp上传下载
- JSP文件上传下载
- JSP中上传下载
- jsp实现文件上传下载
- JSP WEB上传下载实现
- jsp ftp上传下载实例
- jsp/servlet上传下载实例
- JSP/Servlet文件上传下载
- jsp上传下载下篇
- jsp文件上传下载
- JSP/Servlet文件上传下载
- jsp上传下载功能
- jsp文件上传下载
- jsp 文件上传下载
- Jsp 实现文件上传下载
- fragement的生命周期
- 使用tcpdump对Android进行网络抓包
- 在百度开发者平台上部署web项目
- 为了在C语言环境中抓住异常。。。
- [Android] 使用Webview进行OAUTH
- jsp上传下载上篇
- java 多线程 synchronized 入门博文二
- 如何使用UIAutomation进行iOS自动化测试(Part I)
- Android仿人人客户端(v5.7.1)——个人主页(三)
- 一步一步学Entity Framework 4.x (3)
- 儒家修炼之道
- 第67天的交易(2013-7-19)(-100)(-90)
- hdu 1305
- js验证文本框输入的值