文件上传下载整理
2017-05-13 12:35
162 查看
jar包
controller接收参数@RequestParam("files")MultipartFile[] files
页面提交时要在form表单加上enctype="multipart/form-data"
文件上传工具类以及删除工具
<!-- 文件上传下载 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>spring配置
<!-- 上传下载的配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10240000000"/> <property name="defaultEncoding" value="utf-8"/> </bean>
controller接收参数@RequestParam("files")MultipartFile[] files
页面提交时要在form表单加上enctype="multipart/form-data"
文件上传工具类以及删除工具
public class UploadUtil { //这个给定上传下载的文件数组和路径就可以完成上传工作 public static Map<String,String> upFile(String path,MultipartFile[] files){ Map<String,String> map=new HashMap<String,String>(); //先判断当前的路径是否存在没有就建造 File file = new File(path); if(!file.exists()){ file.mkdirs(); } //遍历上传资料 if(files.length!=0){ for (int i = 0; i < files.length; i++) { try { String oldName=files[i].getOriginalFilename(); String format = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); String endPath=path+File.separator+format+oldName; files[i] .transferTo(new File(endPath)); //添加文件存储的路劲和文件的名称 map.put(oldName,endPath); } catch (Exception e) { e.printStackTrace(); } } } return map; } //删除文件的方法 可以是文件或者文件夹 public static void deleteFilePath(String path){ File file = new File(path); if(file.exists()){ deleteFile(file); } } //删除文件的辅助方法 public static void deleteFile(File f){ if(f.isFile()){ f.delete(); } if(f.isDirectory()){ File[] files = f.listFiles(); for (File file : files) { if(file.isFile()){file.delete();} if(file.isDirectory()){deleteFile(file);} } } } }下载工具类
/** * 下载工具类 */ public class DownLoadUtil { public static void down(HttpServletRequest request, HttpServletResponse response, String path, String fileName) { response.setContentType("text/html;charset=utf-8"); try { request.setCharacterEncoding("utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } BufferedInputStream bis = null; BufferedOutputStream bos = null; try { long fileLength = new File(path).length(); response.setContentType("application/x-msdownload"); response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "ISO8859-1")); response.setHeader("Content-Length", String.valueOf(fileLength)); bis = new BufferedInputStream(new FileInputStream(path)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }打包下载工具类
public class PackDownload { //文件打包下载 public static HttpServletResponse downLoadFiles(File file,List<File> files, HttpServletRequest request, HttpServletResponse response) throws Exception { try { /**创建一个临时压缩文件, * 我们会把文件流全部注入到这个文件中 * 这里的文件你可以自定义是.rar还是.zip*/ if (!file.exists()){ file.createNewFile(); } response.reset(); //response.getWriter() //创建文件输出流 FileOutputStream fous = new FileOutputStream(file); /**打包的方法我们会用到ZipOutputStream这样一个输出流, * 所以这里我们把输出流转换一下*/ ZipOutputStream zipOut = new ZipOutputStream(fous); /**这个方法接受的就是一个所要打包文件的集合, * 还有一个ZipOutputStream*/ zipFile(files, zipOut); zipOut.close(); fous.close(); return downloadZip(file,response); }catch (Exception e) { e.printStackTrace(); } /**直到文件的打包已经成功了, * 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中, * 稍后会呈现出来,接下来的就是往客户端写数据了*/ return response ; } /** * 把接受的全部文件打成压缩包 * @param List<File>; * @param org.apache.tools.zip.ZipOutputStream */ public static void zipFile (List files,ZipOutputStream outputStream) { int size = files.size(); for(int i = 0; i < size; i++) { File file = (File) files.get(i); zipFile(i,file, outputStream); } } public static HttpServletResponse downloadZip(File file,HttpServletResponse response) { try { // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath())); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); //如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理 response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(file.getName(), "UTF-8")); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); }finally{ try { File f = new File(file.getPath()); f.delete(); } catch (Exception e) { e.printStackTrace(); } } return response; } /** * 根据输入的文件与输出流对文件进行打包 * @param File * @param org.apache.tools.zip.ZipOutputStream */ public static void zipFile(int a,File inputFile, ZipOutputStream ouputStream) { try { if(inputFile.exists()) { /**如果是目录的话这里是不采取操作的, * 至于目录的打包正在研究中*/ if (inputFile.isFile()) { FileInputStream IN = new FileInputStream(inputFile); BufferedInputStream bins = new BufferedInputStream(IN, 512); //org.apache.tools.zip.ZipEntry String string = inputFile.getName().substring(17,inputFile.getName().length()); int lastIndexOf = string.lastIndexOf("."); ZipEntry entry = new ZipEntry(string.substring(0, lastIndexOf-1)+a+string.substring(lastIndexOf,string.length())); ouputStream.putNextEntry(entry); // 向压缩文件中输出数据 int nNumber; byte[] buffer = new byte[512]; while ((nNumber = bins.read(buffer)) != -1) { ouputStream.write(buffer, 0, nNumber); } // 关闭创建的流对象 bins.close(); IN.close(); } else { try { File[] files = inputFile.listFiles(); for (int i = 0; i < files.length; i++) { zipFile(i,files[i], ouputStream); } } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- [JAVAWEB实战篇]---java文件上传和下载的网摘整理
- JAVA中文件上传下载知识点整理
- JAVA中文件上传下载知识点整理
- [整理]更改win2003的IIS 6.0对上传下载文件的大小限制
- C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用
- JAVA中文件上传下载知识点整理:
- JAVA中文件上传下载知识点整理
- cordova-plugin-file-transfer实现文件上传、下载整理(二)
- JAVA中文件上传下载知识点整理
- cordova-plugin-file-transfer实现文件上传、下载整理(一)
- 读数据 写数据 上传 下载文件 整理
- java做的比较完善的FTP连接上传下载文件
- 通过改变配置来上传文件(csdn整理)
- 文件的上传和下载
- ASP.NET中上传下载文件
- 文件的下载,上传,和邮件的发送
- VB程序员的FTP编程指南1.4-下载或上传文件
- 可否增加上传的文件的下载次数?
- 通过Web Services上传和下载文件
- 使用FTP命令自动完成文件的上传和下载