使用jsp文件进行上传与下载

上传

注意点:
1.前台页面中提交方式设置为post请求,enctype属属性设置为:multipart/form-data

<form action="servlet类地址" method="post" enctype="multipart/form-data">
</form>

2.需要导入jar包
3.后台代码:

// 创建对象DiskFileItemFactory工厂对象
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 创建解析request 接收项对象ServletFileUpload
		ServletFileUpload upload = new ServletFileUpload(factory);
		//处理中文乱码问题
		upload.setHeaderEncoding("utf-8");
		//使用upload解析 request获取的数据
		List<FileItem> list = upload.parseRequest(request);
		if(oneFileItem.isFormField()){
					//文本
					String name =oneFileItem.getFieldName();// 获取 name 的属性值
					if("miaoshu".equals(name)){
					//文本
					}					
				}else{
					//文件
					String only = UUID.randomUUID().toString(); //获取一个随机不可能重复的字符串
					
					String fileName =oneFileItem.getName();// 获取当前上传的文件名  
					int index = fileName.lastIndexOf("."); 
					String newFileName = only+fileName.substring(index);//将随机不可能重复的字符串与文件的后缀名拼接起来

					// 文件流的读写
					InputStream in =oneFileItem.getInputStream();
					// 地址  文件要上传复制到哪个地方去
					OutputStream out =new FileOutputStream(new File("D:/Eclipse/xiangmu/demo01/WebContent/imge",fileName));
					
					byte [] b = new byte[1024];
					int len = 0;
					while((len = in.read(b)) != -1){
						out.write(b, 0, len);
					}//这里是一个while循环不是if判断要是不循环的话就会只执行一遍
					in.close();
					out.close();
				}

下载

下载是超链接中传递参数(例如:id,name),get请求
后台代码:

乱码问题可以参考:解决乱码问题

//获取下载文件的文件名
		String fileName = request.getParameter("fileName");
		//文件名可能包含中文解决乱码问题 
		fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8"); //这是get请求的处理接收中文乱码的问题
		System.out.println(fileName);
		//进行下载
		//由于这是在url地址下载的,如果下载的文件名中包含中文的话会导致编码问题 每一个浏览器的编码规则有可能不一样所以需要设置提交设置一下下载文件的文件名
		String fileName2 = fileName;
		String agent = request.getHeader("user-agent");  //获取浏览器厂商头信息
		if(agent.contains("Firefox")){  //Firefox浏览器中包含Firefox字样
			fileName2=FireFoxEncoding.base64EncodeFileName(fileName);  
		}else{
			//其他浏览器
			fileName2=URLEncoder.encode(fileName,"utf-8");
		}
		//设置两个头 一个流
		//1.设置文件名称的METE值的类型,通过SerevletContext来获取
		response.setContentType(this.getServletContext().getMimeType(fileName)); 
		//2.设置content-dispostion 
		response.setHeader("Content-Disposition", "attachment;fileName="+fileName2);
		//下载就是一个响应 开始创建响应输出流
		//先读取要下载的文件
		//String path = this.getServletContext().getRealPath("/download"); //获取要下载文件的文件夹
		System.out.println(fileName2);
		InputStream in = new FileInputStream(new File("D:/Eclipse/xiangmu/demo01/WebContent/download",fileName));  //读取这个文件
		//再创建一个写的对象
		OutputStream out = response.getOutputStream();  
		//进行读写
		byte[] b = new byte[1024];
		int len = 0;
		while((len=in.read(b))!=-1){
			out.write(b, 0, len);
			}//这里是一个while循环不是if判断要是不循环的话就会只执行一遍
		//关闭流
		out.close();
		in.close();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值