jsp+Servlet上传文件、下载、显示

jsp+Servlet上传文件、下载、显示

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;



public class CommonsFile {

	private static final String UPLOAD_DIR="phoneImg";  //保存路径
	private static final int MEMORY_THR=1024*1024*3;//3M
	private static final int MAX_FILE_SIZE=1024*1024*200;//200M
	private static final int MAX_REQ_SIZE=1024*1024*1024; //1G
	
	/**
	 * 上传文件
	 */
	public static HashMap<String, Object> uploadFile(HttpServletRequest request){
		//配置文件上传信息
		DiskFileItemFactory factory=new DiskFileItemFactory();
		//配置内存临界值,超过范围存入临时目录中
		factory.setSizeThreshold(MEMORY_THR);
		//设置超出范围存入的地方
		factory.setRepository(new File(System.getProperty("java.io.tmpdir")));		
		ServletFileUpload upload=new ServletFileUpload(factory);	
		//配置上传参数	
		upload.setFileSizeMax(MAX_FILE_SIZE);
		//请求最大值
		upload.setSizeMax(MAX_REQ_SIZE);
		//处理编码格式
		upload.setHeaderEncoding("UTF-8");
		//创建对象,接收表单其他数据
		HashMap<String , Object> map=new HashMap<String, Object>();
		//判断上传文件的类型,确定是file文件还是text内容
		String uploadPath=request.getServletContext().getRealPath("")+File.separator+UPLOAD_DIR;
		//判断是否存在
		File uploadDir=new File(uploadPath);
		if(!uploadDir.exists()){
			uploadDir.mkdir();
		}
	
	   	 
		//解析传递过来的参数
		try {
			List items=upload.parseRequest(request);
			Iterator<FileItem> iter=items.iterator();	
			while(iter.hasNext()){
				//取出每个表单元素对象
				FileItem item=iter.next();
				//判断文件还是非文件
				if(item.isFormField()){
					//获取值保存在map中
					String value=item.getString("UTF-8");
					String name=item.getFieldName();
					map.put(name, value); 
				}else{
					//文件操作
					String type=item.getFieldName();
					String fileName=new File(item.getName()).getName();
					//指定存放位置
					String filePath=uploadPath+"/"+fileName;
					File storeFile=new File(filePath);
					//将当前上传的文件名存入数据库中
					map.put(type, fileName);
					//将文件保存到服务器中
					item.write(storeFile);
					
				}
			}			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}
	
	
	/**
	 * 显示上传的文件
	 */
	public static void display(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		//上传文件目录
				String uploadPath = request.getServletContext().getRealPath("/uploadimg");
				//定义 集合 存放文件名称
				/*Map<String, String> fileNameMap = new HashMap<String, String>();*/
				List<String> list = new ArrayList<String>();
		 		//根据路径生成 文件
				File file =	new File(uploadPath);
				//调用方法
				judgeFile(file, list);
				request.setAttribute("comlist", list);
				request.getRequestDispatcher("../personal.jsp").forward(request, response);
	
	}
	
	public static void judgeFile(File file,List list){
		
		if(!file.isFile()){
			File[] files= file.listFiles();
			for (File f : files) {
				judgeFile(f, list);
			}
		}else{
			//map.put(file.getName(), file.getName());
			list.add(file.getName());
		}
	}
	
	/**
	 * 下载文件
	 */
	public static void downloadFile(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
		//获取下载文件名称
		String fileName = req.getParameter("filename");
		fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
		//确定下载的目录文件夹
		String fileSavePath = req.getServletContext().getRealPath("/upload");

		//拼接下载的文件路径
		File file = new File(fileSavePath+"\\"+fileName);
		
		if(!file.exists()){
			req.setAttribute("message", "下载的文件不存在....");
			req.getRequestDispatcher("../personal.jsp").forward(req, res);
			return;
		}
		//如果文件存在 则下载
		res.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(fileName, "utf-8"));
		//已文件流的方式 进行下载操作
		FileInputStream in = new FileInputStream(file);
		OutputStream out =	res.getOutputStream();
		byte buffer[] = new byte[1024];
		int lne = 0;
		//循环读取
		while((lne=in.read(buffer))>0){
			out.write(buffer, 0, lne);
		}
		in.close();
		out.close();
	}
	
	public static Map<String,Object> fileUpload(HttpServletRequest request) {
		// 配置文件上传信息
		DiskFileItemFactory fac = new DiskFileItemFactory();
		// 配置内存临界值
		fac.setSizeThreshold(MEMORY_THR);
		// 设置超出范围的临时目录
		fac.setRepository(new File(System.getProperty("java.io.tmpdir")));
		// 创建文件上传对象
		ServletFileUpload upload = new ServletFileUpload(fac);
		// 配置上传文件参数
		upload.setFileSizeMax(MAX_FILE_SIZE);
		// 配置请求最大值
		upload.setSizeMax(MAX_REQ_SIZE);
		// 处理数据编码
		upload.setHeaderEncoding("utf-8");
		// 创建对象接收表单中的其他数据
		Map<String, Object> formData = new HashMap<String, Object>();
		// 设置上传文件保存路径
		String savePath = request.getServletContext().getRealPath("/StrategyImages");
		File saveDir = new File(savePath);
		// 判断文件夹是否存在,不存在则创建
		if (!saveDir.exists()) {
			saveDir.mkdir();
		}
		// 获取表单传递的数据
		try {
			List<FileItem> fiList = upload.parseRequest(request);
			// 遍历获取到的内容
			Iterator<FileItem> it = fiList.iterator();
			while (it.hasNext()) {
				FileItem fi = it.next();
				// 判断是否为文件,文件上传,其他数据保存到map
				if (fi.isFormField()) {
					String key = fi.getFieldName();
					String value = fi.getString();
					formData.put(key, value);
				} else {
					fi.write(new File(savePath + "/" + fi.getName()));
					formData.put("src", "http://localhost:8080/FPTravel/StrategyImages/" + fi.getName());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return formData;
	}
	
	 /**
	  * 删除文件
	  */
	 public static void delFile(String path){
		 File file=new File(patha);
         if(file.exists()&&file.isFile()){
             file.delete();
             System.out.println("成功");
         }       
     }
}

这里通过一个上传头像加qi它数据然后以ajax方式提交数据举一个例子

<form id="form1">
<input type="file" name="g_header" id="headimgfile" style="display:none;">
<img style="width:120px;height:130px;" src="../images/pic/1.png" class="updateheadimg" id="heImg">
</form>

$('#form1').submit(function(){

 var img="";

   /*---上传头像- */
	$('#heImg').click(function(){
		  $("#headimgfile").click();
		  $("#headimgfile").change(function(e){
		       var url = window.URL.createObjectURL(e.target.files[0]);
		       $("#heImg").attr("src",url).attr("style","height:120px;","width:130px");
		  }); 
	 	
	 }) 

    
	   $("#headimgfile").change(function(e){
	      	img=e.target.files[0];
	     })

		 var form = new FormData();
           form.append("g_header",img);
		   form.append("g_name", $('#g_name').val());
		   form.append("g_sex",  $('input:radio[name="g_sex"]:checked').val());
		
		

		$.ajax({
         			url:'../../servlet/BackUser?method=addGuider',
         			type:'post',
         			data:form,
         			dataType:'text',
         			processData : false, // 使数据不做处理
        			contentType : false, // 不要设置Content-Type请求头
         			success:function(ret){
         			if(ret=='true'){
	         			layer.msg('添加成功',function(){
	         					icon:1
	         					time:3000
	         			})
         			}

         			
         			}
         		})


})



Servlet 中:

public void upload(HttpServletRequest request, HttpServletResponse response) {
	HashMap<String, Object> map=CommonsFile.uploadFile(request);
		
		String  g_header=(String)map.get("g_header");
		String  g_name=(String) map.get("g_name") ;
		String  g_sex=(String)map.get("g_sex") ;
		....
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值