Java的文件上传

文件上传效果图:




代码如下:

package star.july.upload;

import java.io.File;
import java.io.IOException;
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 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 org.apache.commons.io.FileUtils;

public class UploadServletDetail extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1、创建DiskFileItemFactory,设置缓存配置
		DiskFileItemFactory factory = new DiskFileItemFactory(1*1024*1024,new File("f:/testwork/tempFiles"));
		//2、创建ServletFileUpload对象,用于解析文件
		ServletFileUpload sfu = new ServletFileUpload(factory);
		
		//设置单个文件上传的最大大小为200KB
//		sfu.setFileSizeMax(200*1024);
//		sfu.setSizeMax(400*1024);  //设置多文件上传总大小	
		
		//解决编码问题
		sfu.setHeaderEncoding("utf-8");
		
		//3、开始解析上传的文件
		try{
			List<FileItem> list = sfu.parseRequest(request);
			
			//4、获取文件信息
		//	if(list!=null){
			
			//遍历多个文件
			for(FileItem item : list){
				
				//接受非文件类型数据
				if(item.isFormField()){
					String na = item.getFieldName();
					if("userName".equals(na)){
						String string = item.getString("utf-8");
						System.out.println("用户名:"+string);
					}
					if("eMail".equals(na)){
						String string = item.getString("utf-8");
						System.out.println("邮箱:"+string);
					}
				}
		
					//		FileItem item = list.get(0);
					
					//限制文件类型
					String contentType = item.getContentType();
					//只能上传图片:image/xxxxx
					/*	if(!contentType.matches("image/[a-zA-Z0-9]+")){
					//不允许类型
					request.setAttribute("msg", "不支持该类型:"+contentType);
					request.getRequestDispatcher("/upload.jsp").forward(request,response);
					return;
				}
					 */
					String fileName = item.getName();
					//文件名不为空
					if(fileName != null && !fileName.equals("")){
						String name =null;
						String newName =null;
						//如果浏览器将路径也写进去,可用以下方法
						//判断文件名是否包含一个可选的与系统有关的前缀 字符串,比如盘符,"/" 表示 UNIX 中的根目录,"\\\\" 表示 Microsoft Windows UNC 路径名。 
					/*	if(fileName.contains(File.separator)){
							//抽取文件名
							 name = fileName.substring(fileName.lastIndexOf(File.separator)+1);
							 System.out.println(name);
							 String end = fileName.substring(fileName.lastIndexOf(".")+1);
							 System.out.println(end);
							 //生成随机数,使文件名唯一
							 UUID ru = UUID.randomUUID();
							 newName = name+ru+"."+end;
						}*/
						System.out.println("文件名称:"+ fileName);
						System.out.println("文件类型:"+item.getContentType());
						System.out.println("文件大小:"+item.getSize());
						System.out.println("文件内容:"+item.getInputStream());
						
						//把上次的文件保存在服务器的硬盘中
						FileUtils.copyInputStreamToFile(item.getInputStream(), 
								new File("f:/testwork/"+ fileName));
						
						//删除临时文件
						item.delete();
					
				}
			}
		}catch(FileSizeLimitExceededException ivte){
			request.setAttribute("msg", "超出可支持的单个文件的大小200KB");
			request.getRequestDispatcher("upload.jsp").forward(request, response);
			return;
		}
		catch(FileUploadException e){
			e.printStackTrace();
		}
	}

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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值