文件下载-SpringMVC中測试

直接改动文件路径就能够。其它都不须要改动,帮助类已经为大家写好,可直接使用

1、Scroller:

/**
	 * 下载文件
	 * @author liupeng
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/testFileDown")
	public String testFileDown(HttpServletRequest request,HttpServletResponse response)throws Exception{
		FileOperator.FileDownload("e:"+File.separator+"tt.pdf", response);
		return null;
	}

2、FileOperator:

package com.utcsoft.common.util;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.utcsoft.common.servlet.Log4jInitServlet;
public class FileOperator {
	private final static Log logger = LogFactory.getLog(FileOperator.class);

	public static String path = "c:";
	public static int count = 0;

	public FileOperator(){
		String tmp = getClass().getResource("/").getPath();
		System.out.println(tmp);
	}

	public static String getRootPath(){
		try{
			String proName = Log4jInitServlet.propertiesPath;
			String tmp = System.getProperty("user.dir");
			path = tmp.substring(0, tmp.lastIndexOf(File.separator) + 1) + "bid" + File.separator;

			/*String osName = System.getProperties().getProperty("os.name");
			if (osName.toLowerCase().indexOf("windows") == -1)
			{
				path = "/home/bid/";
			}*/
			InputStream in = new BufferedInputStream(new FileInputStream(proName));
			Properties p = new Properties();
			p.load(in);
			//p.containsKey("path.file")
			if(!p.getProperty("path.file").toString().trim().equals("")){
				path = p.getProperty("path.file");
			}
		}
		catch(Exception ex){
			logger.error("[FileOperator] - 获取文件存放路径出现异常 - " + ex.getMessage());
		}
		return path;
	}
	//传送文件流到服务端
	public static void FileUpload(String filePath, HttpServletRequest request)throws ServletException, IOException{
		OutputStream out = null;
		InputStream ins = null;
		try {
			ins = request.getInputStream();
			out = new FileOutputStream(filePath);

			byte[] fileData = new byte[1024];
			int readCount = 0 ;
			count = 0;

			while((readCount=ins.read(fileData,0,1024)) != -1){
				out.write(fileData,0,readCount);
				count += readCount;
			}
			out.flush();
			logger.info("[FileUpload] - read file size:"+count + "=======" + request.getClass() + ":" + filePath);
		}catch(Exception ex){
			ex.printStackTrace();
			logger.error("[FileUpload] - " + ex + "=======" + request.getClass());
		}finally {
			out.close();
			ins.close();
		}
	}

	//传送文件流到服务端
	public static String loadString(String path) throws IOException
	{
		StringBuffer buf = new StringBuffer();
		String line = null;
		java.io.File file = new java.io.File(path);
		java.io.InputStream in = null;
		java.io.OutputStream out = null;
		java.io.BufferedReader reader = null;
		try
		{
			//获取fileInputStream流;
			in = new java.io.FileInputStream(file);
			//获取bufferedReader流;
			reader = new java.io.BufferedReader(new java.io.InputStreamReader(
					in));
			//循环读取行,假设读取的行为null时,则退出循环;
			while ((line = reader.readLine()) != null)
			{
				buf.append(line).append("\n");
			}
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			reader.close();
			in.close();
		}
		return buf.toString();
	}
	//在线保存并写文件
	public static void ReadFile(String path1, String path2) throws IOException  {
		OutputStream out = new FileOutputStream(path2);
		try {
			// 创建文件流对象
			FileInputStream is = new FileInputStream(path1);

			// 设定读取的字节数
			int n = 512;
			byte buffer[] = new byte[n];
			int readCount = 0 ;
			count = 0;
			// 读取输入流
			while ((readCount=is.read(buffer, 0, n) )!= -1) {
				out.write(buffer,0,readCount);
				count += readCount;
			}
			out.flush();
			// 关闭输入流
			out.close();
			is.close();
		}
		catch (IOException ioe) {
		}
	}

	//传送文件流到client
	public static void FileDownload(String filePath, HttpServletResponse response)throws ServletException, IOException{
		if("".equals(filePath))
			return;
		OutputStream out = null;
		InputStream ins = null;
		try {
			String fileName = StringOperator.GetFileName(filePath);
			File file = new File(filePath);
			long fileLength = file.length();

			ins = new FileInputStream(filePath);
			out = response.getOutputStream();

			byte[] fileData = new byte[1024];
			int readCount = 0 ;
			count = 0;
			//response.setHeader("Content-Type", "application/octet-stream");
			response.setContentType("application/octet-stream");
			response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName,"UTF-8"));
			response.setHeader("Content-Length", String.valueOf(fileLength));

			while((readCount=ins.read(fileData,0,1024)) != -1){
				out.write(fileData,0,readCount);
				count += readCount;
			}
			out.flush();
			response.flushBuffer();
			logger.info("[FileDownload] - write file size:"+count + "=======" + response.getClass() + ":" + filePath);
		}catch(Exception ex){
			ex.printStackTrace();
			logger.error("[FileDownload] -" + ex+ "=======" + response.getClass());
		}
		finally {
			out.close();
			ins.close();
		}
		//PrintWriter out1 = response.getWriter();
		//out.clear();
		//out = pageContext.pushBody();
	}

	//文件上传--測试通过
	public static boolean FileUploadEx(String filePath, String fileName, long fileSize, InputStream inputStream){
		boolean flag = false;

		try{
			//filePath = StringOperator.GetEncodeString(filePath);
			//fileName = StringOperator.GetEncodeString(fileName);
			logger.info("[FileUploadEx] - filePath="+filePath+" fileName="+fileName);

			InputStream in = inputStream;
			File filed = new File(filePath);
			if (!filed.exists()) {
				filed.mkdirs();
			}
			byte[] buffer = new byte[4096];
			File outFile = new File(filePath + File.separator + fileName);
			FileOutputStream bos = null;
			bos = new java.io.FileOutputStream(outFile);
			int read;
			long yx = 0;

			while ((read = in.read(buffer)) != -1) {
				yx = yx + read;
				bos.write(buffer, 0, read);
			}

			in.close();
			bos.flush();
			bos.close();
			logger.info("[FileUploadEx] - file size:{" + fileSize + "}, read:{" + yx + "}");
			flag = true;

		}catch(Exception ex){
			logger.error(ex);
		}
		return flag;
	}

	public static void writefile(String filepath) {
		File file = new File(path);    //要写入的文件
		BufferedWriter writer = null;
		try {
			if (!file.exists())
				file.createNewFile();

			writer = new BufferedWriter(new FileWriter(file));
			writer.write("111111111111111111111");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (writer != null)
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
	}
	/**
	 *  依据路径删除指定的文件夹或文件,不管存在与否
	 *@param sPath  要删除的文件夹或文件
	 *@return 删除成功返回 true,否则返回 false。

*/
	public static boolean DeleteFolder(String sPath) {
		boolean  flag = false;
		File  file = new File(sPath);
		// 推断文件夹或文件是否存在
		if (!file.exists()) {  // 不存在返回 false
			return flag;
		} else {
			return deleteDirectory(sPath);
		}
	}
	/**
	 * 删除单个文件
	 * @param   sPath    被删除文件的文件名称
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public static boolean deleteFile(String sPath) {
		boolean   flag = false;
		File  file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			file.delete();
			flag = true;
		}
		return flag;
	}
	/**
	 * 删除文件夹(文件夹)以及文件夹下的文件
	 * @param   sPath 被删除文件夹的文件路径
	 * @return  文件夹删除成功返回true。否则返回false
	 */
	public  static boolean deleteDirectory(String sPath) {
		//假设sPath不以文件分隔符结尾,自己主动加入文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		//假设dir相应的文件不存在,或者不是一个文件夹,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		//删除文件夹下的全部文件(包含子文件夹)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			//删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag) break;
			} //删除子文件夹
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag) break;
			}
		}
		if (!flag) return false;
		//删除当前文件夹
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}
	public static void main(String[] args) {
		path = "F:\\test";
		boolean result = FileOperator.DeleteFolder(path);
		System.out.println(result);  

	} 

	//能够先将选择的全部的文件生成一个zip文件,然后再下载,该zip文件,就可以实现批量下载
	public  static void  ZipOutputStreamDemo(String zipsPath,String sourcefile) throws Exception  {
		byte[] buffer = new byte[1024];
		//生成的ZIP文件名称为Demo.zip
		String strZipName = "C:Demo.zip";

		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipName));

		//须要同一时候下载的两个文件result.txt 。source.txt

		File[] file1 = { new File("C:\\test.pdf"),new File("C:\\test11.pdf")};

		for(int i=0;i<file1.length;i++) {

			FileInputStream fis = new FileInputStream(file1[i]);

			out.putNextEntry(new ZipEntry(file1[i].getName()));

			int len;

			//读入须要下载的文件的内容,打包到zip文件

			while((len = fis.read(buffer))>0) {

				out.write(buffer,0,len);

			}

			out.closeEntry();

			fis.close();

		}

		out.close();

		System.out.println("生成Demo.zip成功");
	}
}
时间: 2024-10-10 09:37:40

文件下载-SpringMVC中測试的相关文章

intel dpdk在ubuntu12.04中測试testpmd、helloworld程序

一.測试环境 操作系统:ubuntu12.04   x86_64 dpdk版本号:1.6.0r2 虚拟机:vmware 10 网卡: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01) 二.測试准备 利用vmware 给 Ubuntu 12.04加入4块虚拟网卡.加入网卡的过程中选择的是默认的NAT模式. 三.測试过程 1.利用setup.sh測试testpmd程序 1).配置环境变量RTE_SDK 和

文件下载-SpringMVC中测试

直接修改文件路径就可以,其他都不需要修改,帮助类已经为大家写好,可直接使用 1.Scroller: /** * 下载文件 * @author liupeng * @param request * @param response * @return * @throws Exception */ @RequestMapping(value="/testFileDown") public String testFileDown(HttpServletRequest request,HttpS

ios的单元測试OCUnit以及更新了之后的XCTestCase

1.像一般创建项目的步骤一样.创建一个用于測试的项目或者打开一个待測试的项目. (oc是5.0之前所使用的測试,如今用的是XCtestCase,默认会创建一个主的測试类.曾经版本号可能非常多步骤省去) 例如以下:我们能够看到一个text中的測试文件,如今全部測试类都是继承XCTestCase类. 2.写入对应的測试用例在測试类,測试类中对要測试的类须要进入对应的类的头文件,这个是理所应当的.然后执行"执行測试".快捷键:command+U或者product-> test. 以下是

安卓手机软件測试耗电量

欢迎大家转载,为保留作者成果,转载请注明出处,http://blog.csdn.net/netluoriver,有些文件在资源中也能够下载! 假设你没有积分,能够联系我索要! 我是做多媒体调度的,须要在安卓手机中測试调度软件的在视频通讯时手机的能够支撑的时长,在网上找了非常多測试电量的软件都不惬意! 在google中查找也没有找出一个好的方案来,近期在測试的时候突然发现手机中带有一个电量的历史纪录的功能.真是"踏破铁鞋无觅处,得来全不费工夫".測试就是这样,要学会善于发现! 来说下手机

敏捷协作 (測试驱动一切)

?        在敏捷开发中, 測试人员所面临的最大的挑战, 便是怎样与 Super Product Owner, Product Owner, 开发者可高效的协同合作? ?        本文首先便是在探讨測试人员该建立何种的专业,经由自身的专业,建立起与 Super Product Owner, Product Owner, 开发者间的信任与尊重? 藉由这份信任与尊重, 成功的跨出与Super Product Owner, Product Owner, 开发者合作的第一步? ?      

Mock+Proxy在SDK项目的自己主动化測试实战

项目背景 广告SDK项目是为应用程序APP开发者提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - 错误日志打点 - 反作弊 团队现状 在项目推进的过程中.逐渐暴露了一些问题: 1. 项目团队分为上海团队(服务端)和北京团队(client),因为信息同步,人力资源等其它原因.服务端与client的开发进度非常难保持同步,经常出现client等着和服务端联调的情况 2. 接口文档不稳定,理解有偏差

在Eclipse中使用JUnit4进行单元測试(0基础篇)

本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能非常强大,但我们在程序中仅仅用到该函数的一小部分功能,而且经过调试能够确定,这一小部分功能是正确的.可是,我们同一时候应该确保每个函数都全然正确,由于假设我们今后假设对程序进行扩展,用到了某个函数的其它功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情.所以说,每编写完一个函数之后,都应该对这

MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录

这几天由于原来在用的hp laptop的电池坏掉了,机器一不小心就断电.所以仅仅能花时间在自己的mackbook pro上又一次搭建整套环境.大家都知道搭建好开发环境是个非常琐碎须要耐心的事情,特别是当你搭建的安卓平台的时候常常须要FQ,那个慢不是常人能够忍受的.所以过程中建议大家边看书或者玩手机边搭建,省得一直瞪着屏幕导致爆血管的意外发生. 这里本人尝试把在mac上搭建移动平台自己主动化測试框架的一些碰到的问题和关键点给描写叙述一下.以方便后来者能够借鉴. 1. 假设你须要的是最新的eclis

Maven项目中mvn clean后找不到測试类问题

在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.