HTML中的file文件上传后台得到代码

首先需要commons-fileupload.jar
链接:https://pan.baidu.com/s/1LJH1E3oi8SEZHCQWjqBNDg
提取码:ykjx
然后就是代码了,我把他封装在一个方法里面

package util;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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;



public class upload {
/**
 * 得到表单文件	
 * @param request
 * @param response
 * @param path 保存地址,为空时保存在==》 服务器地址data/项目名字/下面
 * @return map 的数组==》名字是表单文字,value是值,特别的(data)里面保存的是上传文件的名字和状态。
 * @throws ServletException
 * @throws IOException
 */
public Map GetFill(HttpServletRequest request, HttpServletResponse response,String path) throws ServletException, IOException {
		//设置语言
	    request.setCharacterEncoding("gbk");
	    response.setCharacterEncoding("UTF-8");
	    response.setContentType("text/html;charset=UTF-8");
	    
	    //设置字段
	    Map map=new HashMap<>();
	    // 判断enctype属性是否为multipart/form-data
	    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	    System.out.println("判断"+isMultipart);
	    
	    //设置路径
	    if(null==path) {
	    	  //得到项目名字
		       String xmname=request.getServletContext().getContextPath();
		       xmname=xmname.substring(1,xmname.length());
		       System.out.println("===项目名字"+xmname); 
		      //设置地址
		       String pth = request.getSession()
						.getServletContext().getRealPath("data/upload"+xmname+"/");
		       path = pth.replace("\\"+xmname, "");
		     
	    }
	    System.out.println("保存地址=="+path);
	    
	    
	    if(isMultipart) {
	    	 // Create a factory for disk-based file items
		    DiskFileItemFactory factory = new DiskFileItemFactory();
		     
		    // 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现上传文件的保存
		    // 此方法是设置是否使用临时文件的临界值(单位:字节)
		    //factory.setSizeThreshold(yourMaxMemorySize);
		    // 与上一个结合使用,设置临时文件的路径(绝对路径)
		    factory.setRepository(new File(path));
		     
		    // Create a new file upload handler
		    ServletFileUpload upload = new ServletFileUpload(factory);
		     
		    // 设置上传内容的大小限制(单位:字节)
		    //upload.setSizeMax(yourMaxRequestSize);
		     
		    // Parse the request
		   
			try {
				List<?> items = upload.parseRequest(request);
			    Iterator iter = items.iterator();
		        while (iter.hasNext()) {
		          FileItem item = (FileItem) iter.next();
		          if (item.isFormField()) {
		        	//如果是普通表单字段
		                String name = item.getFieldName();
		    		    String value = item.getString();
		    		    System.out.println(name+"=得到==="+value);
		    		    map.put(name, value);
		           } else {
		        	//如果是文件字段
		                String fieldName = item.getFieldName();
		    		    String fileName = item.getName();
		    		    long sizeInBytes = item.getSize();
		    		    System.out.println("=================="+item);   
		    		    if(fieldName != null && sizeInBytes!= 0){
			                  File newFile = new File(path + fileName);
			                  if(newFile.exists()) {
			                	    MapPutFill(map,fileName+":文件存在");
			                	    item.delete();
			                   }else {
			                	  try {
			                		   item.write(newFile);
			                		   MapPutFill(map,fileName+":保存成功");
			                       } catch (Exception e) {
			                       // TODO Auto-generated catch block
			                       e.printStackTrace();
			                       MapPutFill(map,fileName+":文件保存失败");
			                   }
			                   }
			               }else{
			                   System.out.println("文件没有选择 或 文件内容为空");
			                   MapPutFill(map,fileName+":文件没有选择 或 文件内容为空");
				                 
			               }
		    		    
		    		    
		    		    
		            } 
		          }
		        
			} catch (FileUploadException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("报错");
				
		        }
		    

	    	
	    } 
	   
	  

return map;
}
 
public void MapPutFill(Map map,String data ) {
	if(map.get("data")==null) {
		map.put("data", data);
	}else {
		String dString=map.get("data")+";"+data;
		map.put("data", dString);
	}
	
}

}

上传的文件默认我是保存在Tomact的服务器里面的一个文件夹下面,并且配置了服务器通过url访问的权限,不知道的可以看我的博客
有什么不足的希望多多交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值