servlet3.0完成文件上传(目录分离算法)

servlet3.0完成文件上传(目录分离算法)_第1张图片servlet3.0完成文件上传(目录分离算法)_第2张图片servlet3.0完成文件上传(目录分离算法)_第3张图片servlet3.0完成文件上传(目录分离算法)_第4张图片

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>




My JSP 'upload.jsp' starting page











	

文件上传的页面

文件描述
文件上传
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/uploadservlet")
@MultipartConfig//必须加上
public class uploadservlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//接收普通参数
		String fileDescribe=request.getParameter("filedescribe");
		request.setCharacterEncoding("UTF-8");
		//接收文件上传的名称
		Part part = request.getPart("upload");
		long size = part.getSize();//获得文件大小
		String name = part.getName();//表单的name
		System.out.println(size+"  "+name);
		String header=part.getHeader("Content-Disposition");
		int idx=header.lastIndexOf("filename=\"");
		String fileName=header.substring(idx+10, header.length()-1);
		System.out.println(fileName);
		InputStream is = part.getInputStream();//读
		String path=this.getServletContext().getRealPath("/upload");
		FileOutputStream os = new FileOutputStream(path+"/"+fileName);//在tomcat中找文件
		byte[] b = new byte[1024];
		int len=0;
		while((len=is.read(b))!=-1){
			os.write(b, 0, len);
		}
		is.close();
		os.close();
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request,  response);
	}

}

servlet3.0完成文件上传(目录分离算法)_第5张图片

package utils;

import java.util.UUID;

import sun.text.normalizer.Replaceable;

//产生随机的字符串
public class UUIDutils {
	public static String getUUID(){
		return UUID.randomUUID().toString().replace("-", "");
	}
	public static String getUUIDFileName(String fileName){
		return UUIDutils.getUUID()+fileName;
	}
}
servlet3.0完成文件上传(目录分离算法)_第6张图片

servlet3.0完成文件上传(目录分离算法)_第7张图片 servlet3.0完成文件上传(目录分离算法)_第8张图片

package utils;

public class uploadutils {
	public static String getPath(String UUIDFileName){
		//使用唯一文件名。hashCode
		int code1=UUIDFileName.hashCode();
		int d1=code1 & 0xf;//得到一级目录
		int code2=code1>>>4;//无符号右移四位
		int d2=code2 & 0xf;//得到二级目录
		return "/"+d1+ "/"+d2;
	}
}
String path=this.getServletContext().getRealPath("/upload");
		String UUIDFileName=UUIDutils.getUUIDFileName(fileName);
		String realPath=path+uploadutils.getPath(UUIDFileName);
		File file=new File(realPath);//new File();并不创建文件实体,只是创建一个指向realPath的引用
		if(!file.exists()){//如果路径不存在
			file.mkdirs();//则创建多级目录
		}
		FileOutputStream os = new FileOutputStream(realPath+"/"+UUIDutils.getUUIDFileName(fileName));//在tomcat中找文件

servlet3.0完成文件上传(目录分离算法)_第9张图片
servlet3.0完成文件上传(目录分离算法)_第10张图片

你可能感兴趣的:(servlet3.0完成文件上传(目录分离算法))