java实现异步上传文件

之前为了做截图上传的功能,首先做了个小练习,即对多个普通文件+普通文本进行异步上传。由于对Ajax不熟,前端学得又那么渣,所以搞了好久的说。。

首先是前端提交index.jsp页面,这里用到了formData,使用Jquery来发送formData对象。上传多个文件和普通文本,使用formData.append方法即可,下面给出index.jsp代码:

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








  


说几句吧:

后台Servlet处理,这里用到了几个上传文件的包:

commons-beanutils-1.9.1.jar

commons-fileupload-1.3.1.jar

commons-io-2.4.jar

用FileItem类的isFormField方法来判断是否为文件,为文件则存储,不是文件就获取内容。最后用printWriter反馈信息给前端。

后台代码如下:

package servlet;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

/**
 * Servlet implementation class for Servlet: UploadServlet
 * 
 */
@WebServlet("/Upload")
public class Upload extends javax.servlet.http.HttpServlet implements
		javax.servlet.Servlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String savePath = this.getServletContext().getRealPath("/userFiles/");//存储路径
		String retMsg = "";//定义将返回给客户端的信息
		try {
			if (ServletFileUpload.isMultipartContent(request)) {
				List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
				for (FileItem item : items) {
					if (!item.isFormField()) {// 过滤掉表单中非文件域
						String fileType = item.getName().substring(item.getName().lastIndexOf(".") + 1).toLowerCase();//文件类型
						String fileName = new Date().getTime() + "." + fileType; //保存的文件名
						String filePath = savePath + "\\" + fileName; //保存的文件路径
						
						BufferedInputStream in = new BufferedInputStream(item.getInputStream());// 获得文件输入流
						BufferedOutputStream out = new BufferedOutputStream(
								new FileOutputStream(new File(filePath)));// 获得文件输出流
						Streams.copy(in, out, true);// 开始把文件写到指定的上传文件夹
						retMsg += "上传文件成功!";
						in.close();
						out.close();
					} else {
						 retMsg += "您输入了:" + new String(item.getString().getBytes("iso-8859-1"),"utf-8");
					}
				}
			}
			response.setContentType("text/html;charset=utf8");
			PrintWriter pw = response.getWriter();
			pw.print(retMsg);
			pw.flush();
			pw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
最后效果:

java实现异步上传文件_第1张图片

你可能感兴趣的:(Java)