文件上传及下载处理 及 文件名称乱码处理

今天上班先博一博,哈哈。。

①:struts1跟struts2文件上传基本的处理时差不多滴。就整个1的核心码囖。如下:

html 页面 form里面一定要设置类型为:

 enctype="multipart/form-data"

java类里面进行一个文件读写即可:

inputStream = new DataInputStream(formFile.getInputStream());//文件流读取
// 输出文件流
outputLocalStream = new DataOutputStream(new FileOutputStream(
		new File(filePath + "/" + fileName)));
byte buffer[] = new byte[bufSize];//设置每次读取的文件流大小  一般默认设置:1024 ;当然了,也可以写其他的。
while ((inputStream.read(buffer, 0, buffer.length) != -1)) {
	outputLocalStream.write(buffer, 0, buffer.length);
}

╭︿︿︿╮
{/ o  o /} 
 ( (oo) )  
  ︶ ︶︶:一、在struts1里面文件的封装对象是formfile,不能使用file,struts2里面才能使用file。

                二、文件读写操作完成记得关闭文件流。

②:struts1和2的文件download时候我们一般是将服务器或者数据库里面的文件取得然后给用户下载,河马如下:

一、最简单的就是直接用超链接,如:<a href=“http://www.XXX.com/project/downloadFiles/fileOne” >fileOne</a>

二、利用文件读写,然后把文件流抛出,利用浏览器自己的对流的封装下载文件。

// ServletContext init
				ServletContext context = request.getServletContext();
				// 文件 MimeType的取得
				response.setContentType(context.getMimeType(fileName));
				// 文件取得
				File file = new File(filePath + "/" + fileName);

				if (file.exists()) {
					// 文件名处理
					fileDownName = java.net.URLEncoder.encode(fileDownName,
							"UTF-8").replaceAll("\\+", "%20");
					String temp = "attachment;filename=\"" + fileDownName
							+ "\"";
					//设置header
					response.setHeader("Content-disposition", temp);
					// 输出文件流
					out = response.getOutputStream();
					// 下载源文件读取
					bis = new BufferedInputStream(new FileInputStream(file));
					bos = new BufferedOutputStream(out);
					byte[] buff = new byte[bufSize];
					int bytesRead;
					// writeFile
					while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
						bos.write(buff, 0, bytesRead);
					}
				}

╭︿︿︿╮
{/ o  o /} 
 ( (oo) )  
  ︶ ︶︶:一、超链接的办法存在很大的风险,所以一般我们不采用这类方法处理。

                二、文件读写操作完成记得关闭文件流。

 

 

 

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值