javaWeb 文件上传功能

首先要下载两个jar包,点击我的网盘地址即可下载
http://pan.baidu.com/s/1o7C5iP0
比较重点的几个类:FileItem,servletFileUpload,
FileItemFactory
 
  
下面是具体代码
不但可以传文本,还可以传各种其他的文件
package com.xyp.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
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.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet(value="/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 {
		response.setCharacterEncoding("UTF-8");//设置编码
		response.getWriter().println("请以post方式上传文件");//输出信息
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("unchecked") //消除unchecked warning
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");//设置response编码
		response.setContentType("text/html");//设置response输出类型
		File file1 = null,file2 = null;
		String description1 = null,description2 = null;
		PrintWriter out = response.getWriter();
		FileItemFactory factory = new DiskFileItemFactory();
		//建立FileItem工厂,可以设置缓存在内存或者缓存在硬盘
		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
		//设置servletFileUpload使用刚才建立的FileItem工厂
		try {
			List list=servletFileUpload.parseRequest(request);//将结果放置在List中,解析request
			out.println("遍历所有的FileItem...
"); for(FileItem fileItem:list){ //遍历所有的FileItem
				//打出所有上传的标签的name属性值
				System.out.println(fileItem.getFieldName());
				//获取所有fileitem是文件的文件名
				String str = new String(fileItem.getName());
				if(fileItem.isFormField()){	//如果是文本域
					if("description1".equals(fileItem.getFieldName())){//如果是该参数
						out.println("遍历到 description1...
"); description1 = new String(fileItem.getString().getBytes(),"UTF-8"); } if("description2".equals(fileItem.getFieldName())){//如果是该参数 out.println("遍历到 description2...
"); description2 = new String(fileItem.getString().getBytes(),"UTF-8"); } }else{ //否则为文件域 if("file1".equals(fileItem.getFieldName())&&!"".equals(str)){//如果name=file1,并且文件名不为空字符串 File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8")); out.println("遍历到file1...
"); out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"
"); //服务端文件,放在upload文件夹下 file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());//创建file实例 file1.getParentFile().mkdirs();//创建文件夹路径 file1.createNewFile();//创建新文件 InputStream ins = fileItem.getInputStream();//FileItem的内容 OutputStream ous = new FileOutputStream(file1);//输出到文件中 try { byte[] buffer = new byte[1024];//字节缓存 int len = 0;//实际缓存长度 while((len=ins.read(buffer))>-1){//循环读入缓存 ous.write(buffer,0,len); //ous.write(buffer); out.println("已保存文件"+file1.getAbsolutePath()+"
"); } }finally{ ous.close(); ins.close(); } } if("file2".equals(fileItem.getFieldName())&&!"".equals(str)){//如果name=file2,并且文件名不为空字符串 File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8")); out.println("遍历到file2...
"); out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"
"); //服务端文件,放在upload文件夹下 file2 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());//创建file实例 file2.getParentFile().mkdirs();//创建文件夹路径 file2.createNewFile();//创建新文件 InputStream ins = fileItem.getInputStream();//FileItem的内容 OutputStream ous = new FileOutputStream(file2);//输出到文件中 try { byte[] buffer = new byte[1024];//字节缓存 int len = 0;//实际缓存长度 while((len=ins.read(buffer))>-1){//循环读入缓存 ous.write(buffer,0,len); out.println("已保存文件"+file1.getAbsolutePath()+"
"); } }finally{ ous.close(); ins.close(); } } } } out.println("Request解析完毕"); }catch (Exception e) { e.printStackTrace(); } if(file1 !=null){//输出file1链接 out.println("
"); out.println("
file1:
"); out.println("
"); out.println(""+file1.getName()+""); out.println("
"); out.println("
"); } if(file2 !=null){//输出file2链接 out.println("
"); out.println("
file2:
"); out.println("
"); out.println(""+file2.getName()+""); out.println("
"); out.println("
"); } out.println("
"); out.println("
description1:
"); out.println("
"); out.println(description1); out.println("
"); out.println("
description2:
"); out.println("
"); out.println(description2); out.println("
"); out.println("
"); } }

前端代码:
 
  




Insert title here


	

上传文件
上传文件一
上传文件二
上传文件说明一
上传文件说明二



 
  

你可能感兴趣的:(杂谈,java,web,文件上传,java,FileItem)