文件下载,可解决下载时各种异常及乱码,空格变+号(1)

引用

本来想写一个关于解决struts做视频上传下载时,各种问题异常的解决方案,但是上传要写的太多了,懒呀,这里只写了个下载的例子及说明(以后有时间了再写上传视频的)。
先罗列一下上传及下载的常见问题吧:
上传:
一.上传
1。如何统计上传文件多大及已经上传多少(统计客户端向临时文件写的大小而不是文件服务器)?
2。如果上传文件大于struts2最大要求,如何给用户一个快速国际化的提示信息而不是等半天才提示
3。当用户点击取消按钮时,如何停止上传动作(用户点击取消的一瞬间,服务器端有可能正向文件服务器写入上传的文件,也有可能文件上传已经完成,正调用外部应用程序进行视频格式的转换或获取视频的截图【关键是这第二个可能,就是点击取消按钮的同时将外部程序这个子进程也杀掉】)
二.下载
1。用户取消问题
2。乱码,特殊符号问题及空格变加号


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Properties;

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

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.xwork.StringUtils;

public class DownloadFileUtils {
	
	//文件存放的目录
	public static String saveFileURL;
	
	/**
	 * 根据上传文件获取其真实读取路径
	 * @param response
	 * @param downloadRealName
	 *       服务器端文件的实际名字
	 * @param fileSource
	 *       服务器端存放文件的目录
	 * @param fileSrcName
	 *       存放文件的文件夹
	 * @param fileName
	 *       下载后文件的名字
	 * @return
	 * @throws IOException
	 */
	public static String downloadFile(HttpServletRequest request,HttpServletResponse response,
			String downloadRealName, String fileSrcName, String fileName) {
		
		InputStream fis = null;
		OutputStream toClient = null;
		try {
			String path = saveFileURL
					+ "\\"+fileSrcName
					+ "\\"+downloadRealName+fileName.substring(fileName.lastIndexOf("."), fileName.length());
			System.out.println("downloadPath----->" + path);
			File file = new File(path);
			 if (!file.exists()) {      
				 return null;
	        }      

你可能感兴趣的:(文件下载)