下载:
/* * 说白了其实导出就是复制粘贴(从存储在云上的文件复制到用户的本地硬盘上): * 先取得路径,然后根据路径来复制 BufferedInputStream 是为了更高效的复制,read()方法是具体的复制行为 * 把流写出中,write()就是具体的粘贴行为 */ public class HaHa { // 下载excel 模板 public Response downLoadExcelModel(HttpServletResponse response,HttpServletRequest request) { BufferedInputStream bufferedInputStream; FileInputStream fileInputStream; OutputStream outputStream; try { String modelName = request.getParameter("modelName"); String modelName1 = java.net.URLEncoder.encode(modelName, "UTF-8").replaceAll("%28", "\(").replaceAll("%29", "\)");// 转义符 String pathName = "excel/" + modelName + ".xlsx"; // path 输出值为:E:20171128esim-80002795esim-serviceesimesim-websrcmainwebappexcel险种组合管理表.xlsx 记住,这个方法一般都是在src.main.webapp下面的 String path = request.getSession().getServletContext().getRealPath(pathName); File file = new File(path); fileInputStream = new FileInputStream(file);// 如果该路径下面没有该文件,则报 “系统找不到指定路径” 的错误 bufferedInputStream = new BufferedInputStream(fileInputStream);// 记住,BufferedInputStream构造方法的参数一般都是FileInputStream对象 byte[] b = new byte[bufferedInputStream.available()]; bufferedInputStream.read(b);// 以为是excel模板的,文件很小,所以可以一次性读出,如果不是excel模板文件很小,就不能了,因为可能内存溢出 /* * 利用response得到输出流outputStream * 再一次性把这输出流写出 */ response.setContentType("application/vnd.ms-excel");//contentType里面的内容要对应excel格式的啊 response.setHeader("Content-disposition", "attachment;filename=" + modelName1 + ".xlsx");//modelName1一定要是那种编码之后的格式 outputStream = response.getOutputStream(); outputStream.write(b); } catch (UnsupportedEncodingException e) { logger.error("下载模版文件名转换异常" + e); } catch (FileNotFoundException e) { logger.error("下载模版文件没有找到对应的模版名异常" + e); } catch (IOException e) { logger.error("下载模版文件名IO异常" + e); } finally { bufferedInputStream.close(); fileInputStream.close();// 我记得这个是不用关的 outputStream.flush(); outputStream.close(); } } /* 下载 wmv 或者 MP4 文件 * 因为mp4或者wmv的文件比较大,所以最好不要用availalbe方法啊 */ public Response downLoadSystemVideo(HttpServletResponse response,HttpServletRequest request,String modelName){ String pathName="video/"+modelName; String[] split = modelName.split("\.");//转义符,实际上是对 . 进行 split;因为要下载的文件后缀有wmv 以及 mp4 嘛 String path=request.getSession().getServletContext().getRealPath(pathName); File file = new File(path); try( FileInputStream fileInputStream = new FileInputStream(file); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);) { if("wmv".equals(split[split.length - 1])) { response.setContentType("wmv video/x-ms-wmv");//contentType里面的内容要对应wmv格式的啊 String modelName1 = java.net.URLEncoder.encode(modelName, "UTF-8").replaceAll("%28", "\(").replaceAll("%29", "\)"); response.setHeader("Content-disposition", "attachment;filename="+modelName1); }else if("mp4".equals(split[split.length - 1])) { response.setContentType("mp4 video/mpeg4");//contentType里面的内容要对应mp4格式的啊 String modelName1 = java.net.URLEncoder.encode(modelName, "UTF-8").replaceAll("%28", "\(").replaceAll("%29", "\)"); response.setHeader("Content-disposition", "attachment;filename="+modelName1); } OutputStream outputStream = response.getOutputStream(); byte[] bytes = new byte[2000]; int a; while((a = bufferedInputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, a); } bufferedInputStream.close(); outputStream.flush(); outputStream.close(); } catch (UnsupportedEncodingException e) { logger.error("下载视频文件名转换异常"+e); } catch (FileNotFoundException e) { logger.error("下载视频文件没有找到对应的视频名异常"+e); } catch (IOException e) { logger.error("下载视频文件名IO异常"+e); } return null; } }
上传:
/*** * http://localhost:8080/testWeb/home.jsp * @author 80002795 * */ @Controller @RequestMapping("upload") public class Upload { /* * 通过流的方式上传文件 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象 */ @RequestMapping("fileUpload") public void fileUpload(@RequestParam("file01") CommonsMultipartFile commonsMultipartFile) throws IOException { InputStream is = null; OutputStream os = null; System.out.println(commonsMultipartFile.getOriginalFilename());// 员工信息安全手册.pdf System.out.println(commonsMultipartFile.getFileItem().getName());// C:UsersPublicDesktop员工信息安全手册.pdf System.out.println(commonsMultipartFile.getContentType());// application/pdf long startTime=System.currentTimeMillis(); try { is=commonsMultipartFile.getInputStream();//哈哈,通过这个就可以获取输入流了,说白了通过这个方法就是复制了 //得到输出流 //commonsMultipartFile.getOriginalFilename()这个方法是获取导入文件的文件名,说白了下面的代码就是得到文件名,用时间肯定要保持数据的独立性啊 String childFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime()) + commonsMultipartFile.getOriginalFilename(); System.out.println(childFileName); //导入之后,要存进哪里的路径,如果没有这个路径,就创建一个呗 String parentPath = "E:\upload\upload22\upload33"; File filePart = new File(parentPath); if (!filePart.exists()) { filePart.mkdirs(); } File fileAll = new File(filePart,childFileName);//记得,关于这个构造方法,第一个参数可以有两种形式,一种是File对象,一种是string类型的路径 os=new FileOutputStream(fileAll); //获取输出流 // 粘贴输入流到输出流 int temp; while((temp=is.read()) != -1){ //一个一个字节的读取并写入 os.write(temp); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { is.close(); os.flush(); os.close(); } long endTime=System.currentTimeMillis(); System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");// 得到的时间大概是:14850ms,实在太慢了 } /* * 采用file.Transto 来保存上传的文件 */ @RequestMapping("fileUpload02") public void fileUpload02(@RequestParam("file02") CommonsMultipartFile commonsMultipartFile, HttpServletRequest request) throws IOException { long startTime=System.currentTimeMillis(); try {
//除了上传文件,还要得到其它参数啊
String name = request.getParameter("name"); //获得文件名并且得到指定路径 //commonsMultipartFile.getOriginalFilename()这个方法是获取导入文件的文件名,说白了下面的代码就是得到文件名,用时间肯定要保持数据的独立性啊 String childFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime()) + commonsMultipartFile.getOriginalFilename(); //导入之后,要存进哪里的路径,如果没有这个路径,就创建一个呗 String parentPath = "E:\upload\upload22\upload33"; File filePart = new File(parentPath); if (!filePart.exists()) { filePart.mkdirs(); } File fileAll = new File(filePart,childFileName);//记得,关于这个构造方法,第一个参数可以有两种形式,一种是File对象,一种是string类型的路径 commonsMultipartFile.transferTo(fileAll);//仔细看与上面的差异,其实,有了这句话,就不用再写获得输入流,创建输出流,写流了,就这么一句话就搞定了。如果再获得输入流的话,就会包io异常:Destination file already exists and could not be deleted } catch (FileNotFoundException e) { e.printStackTrace(); } long endTime=System.currentTimeMillis(); System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");// 得到的时间大概是:10ms } /* *采用spring提供的上传文件的方法,这种方法又长又丑,都不想看了 */ @RequestMapping("springUpload") public void springUpload(HttpServletRequest request) throws IllegalStateException, IOException { long startTime=System.currentTimeMillis(); CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器) //检查form中是否有enctype="multipart/form-data" if(multipartResolver.isMultipart(request)){ //将request变成多部分request MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request; //获取multiRequest 中所有的文件名 Iterator iter=multiRequest.getFileNames(); while(iter.hasNext()){ //一次遍历所有文件 MultipartFile file=multiRequest.getFile(iter.next().toString()); if(file!=null){ String path="E:/springUpload"+file.getOriginalFilename(); File file2 = new File(path); file.transferTo(file2); } } } long endTime=System.currentTimeMillis(); System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");//输出9ms } @RequestMapping("getMultipartFile") public void getMultipartFile(MultipartFile multipartFile) throws Exception { long startTime=System.currentTimeMillis(); try { // String fileName = multipartFile.getName(); String parentPath = "E:\upload\upload22\upload33"; File filePart = new File(parentPath); if (!filePart.exists()) { filePart.mkdirs(); } File fileAll = new File(filePart,"444444");//记得,关于这个构造方法,第一个参数可以有两种形式,一种是File对象,一种是string类型的路径 multipartFile.transferTo(fileAll); } catch (Exception e) { e.printStackTrace(); } long endTime=System.currentTimeMillis(); System.out.println("方法四的运行时间:"+String.valueOf(endTime-startTime)+"ms"); } }
END