文件上传

来源:互联网 发布:端口查询命令 编辑:程序博客网 时间:2024/06/05 16:23

此文件上传所使用的jar包commons-fileupload-1.3.1.jar和commons-io-2.2.jar
页面用javascript写了多文件添加功能,也同时验证了空文件上传的功能

package com.ser.fil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;
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;

/**
* Servlet implementation class UploadServlet
* 需要的jar包commons-fileupload-1.3.1.jar和commons-io-2.2.jar
*
*/
//@WebServlet(“/UploadServlet”)
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/** * @see HttpServlet#HttpServlet() */public UploadServlet() {    super();    // TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    response.getWriter().append("Served at: ").append(request.getContextPath());}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    System.out.println(12321);     request.setCharacterEncoding("utf-8");  //设置编码     DiskFileItemFactory factory = new DiskFileItemFactory();  //获取磁盘条目工厂     String path = request.getRealPath("/upload_tmp");    /**     *  原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,     *  按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tmp 格式的  临时文件     *  然后再将其真正写到 对应目录的硬盘上      *       *  注意要清除这个文件     */     //写到储藏室     factory.setRepository(new File(path));     //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室     factory.setSizeThreshold(1024*1024) ;     ServletFileUpload upload = new ServletFileUpload(factory);       /**      * 注意,所引用的jar包均为 org.apache.commons下的jar包      */     try {         List<FileItem> list = (List<FileItem>)upload.parseRequest(request);         for(FileItem item:list){            String name = item.getFieldName();             if(item.isFormField()) {//如果是form表单                String value = item.getString() ;                request.setAttribute(name, value);              }else{//如果不是form表单                 String value = item.getName() ;                     int start = value.lastIndexOf("\\");                     String filename = value.substring(start+1);                     request.setAttribute(name, filename);                     //new File(parentFolder,fileName)                     OutputStream out = new FileOutputStream(new File("E:/",filename));                     InputStream in = item.getInputStream() ;                     int length = 0 ;                     byte [] buf = new byte[8192] ;//每次上传8K                     System.out.println("本次上传文件的总共的容量:"+item.getSize());                       while( (length = in.read(buf) ) != -1) {                         out.write(buf, 0, length);                       }                     in.close();                     out.close();             }        }    } catch (FileUploadException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }

request.getRequestDispatcher(“NewFile.jsp”).forward(request, response);

}

}

//jsp页面的内容

<%@ page language=”java” contentType=”text/html; charset=utf-8”
pageEncoding=”utf-8”%>




Insert title here

var num = 1;function addFile(){ var docForm = document.getElementById("formId"); var docfile = document.getElementById("hid"); var docinput = document.createElement("input"); docinput.setAttribute("type","file"); docinput.setAttribute("name","file"+num); docForm.insertBefore(docinput,docfile); docinput = document.createElement("br"); docForm.insertBefore(docinput,docfile); num++;}/* * file文件表单为空不能上传 */var n=0;var flag = true;function getFileCheck(){ var node = document.getElementsByTagName("input"); alert(node.length); for(var i=0;i