- 浏览: 52215 次
- 性别:
- 来自: 江西
最新评论
-
czb6788782:
楼主,源码能不能给我学习下~谢谢
Java实现一个压缩小软件 -
hpuyancy:
好像中文会乱码啊?
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz -
shutingwang:
不错
Apache POI SpreadSheet的一些简单应用(二) -
gaowei52306:
gaowei52306 写道为啥我下载后双击无法执行?
抱歉, ...
Java实现一个压缩小软件 -
gaowei52306:
为啥我下载后双击无法执行?
Java实现一个压缩小软件
自己做了一个上传(利用apache-fileupload组件)下载的一个封装、希望对大家有帮组.请看下面例子。
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.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.RequestContext; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; /** * @autor MingMing */ public class FileHandler { /** * 所有上传文件的总长度最大值 */ private long SUM_MAX_SIZE = 50 * 1024 * 1024; /** * 允许上传的文件默认最大值 */ private long MAX_SIZE = 10 * 1024 * 1024; /** * 允许上传的文件类型 */ private String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt", "doc", "docx", "mp3", "wma", "m4a" }; /** * 用完item需delete缓存文件 */ private Map<String,List<FileItem>> files; private Map<String,List<String>> parameters; /** * 设置输出字符集 */ private String ENCODING = "UTF-8"; /** * @param SUM_MAX_SIZE 允许所有文件总长度最大值,当赋值0时使用默认,默认值是50M, 为-1时无限制 * @param MAX_SIZE 允许单个上传文件最大长度是,当赋值0时使用默认,默认值10M,为-1时无限制 * @param ENCODING 输出字符集,默认UTF-8 * @param allowedExt 上传文件类型,当没有传送值时则表示任何类型文件都允许 */ public FileHandler(long SUM_MAX_SIZE,long MAX_SIZE,String ENCODING,String[] allowedExt) { if (SUM_MAX_SIZE != 0) this.SUM_MAX_SIZE = SUM_MAX_SIZE; if (MAX_SIZE != 0) this.MAX_SIZE = MAX_SIZE; if (ENCODING != null) this.ENCODING = ENCODING; this.allowedExt = allowedExt; } public FileHandler() { } public FileHandler upload(HttpServletRequest request) throws UploadException { RequestContext context = new ServletRequestContext(request); if(!ServletFileUpload.isMultipartContent(context)) {//判断form表单的传输方式是否是多数据类型 throw new UploadException("您所提供表单类型不是多数据类型multipart-formdata"); } /** * 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload */ DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); diskFileItemFactory.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘 /** * 采用系统临时文件目录作为上传的临时目录 */ File tempfile = new File(System.getProperty("java.io.tmpdir")); diskFileItemFactory.setRepository(tempfile); /** * 用以上工厂实例化上传组件 设置最大上传尺寸 */ ServletFileUpload fileUpload = new ServletFileUpload( diskFileItemFactory); /** * 单个文件最大的大小 */ fileUpload.setFileSizeMax(MAX_SIZE);//fileSizeMax = -1 没有上限 /** * 整个request中最大上限值(包含所有表单[文本域、文件域]) */ fileUpload.setSizeMax(SUM_MAX_SIZE);//sizeMax = -1 没有上限 /** * 调用FileUpload.settingHeaderEncoding(”UTF-8″),这项设置可以解决路径或者文件名为乱码的问题。 * 设置输出字符集 */ fileUpload.setHeaderEncoding(ENCODING); try { List<FileItem> items = fileUpload.parseRequest(request); if (items == null || items.size() == 0) { throw new UploadException("没有上传一个正确文件!"); } parameters = new HashMap<String, List<String>>(); files = new HashMap<String, List<FileItem>>(); for (FileItem item: items) { String fieldName = item.getFieldName();//文本框名称 <input name=""> if (item.isFormField()) {//简单文本域 /** * 在取字段值的时候,用FileItem.getString(”UTF-8″),这项设置可以解决获取的表单字段为乱码的问题。 */ String value = item.getString(ENCODING);//文本框的值 List<String> values; if (parameters.get(fieldName) != null) { values = parameters.get(fieldName); } else { values = new ArrayList<String>(); } values.add(value); parameters.put(fieldName, values); }else { //文件域 long fileLength = item.getSize(); if (fileLength == 0) { throw new UploadException("文件为空或非法文件!"); } String userPath = item.getName();//完整路径 C:\sdss\ssss\sss.xls String fileName = userPath.substring(userPath.lastIndexOf("\\") + 1); //文件名 sss.xls String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); //XLS //检测文件的后缀名合法性 if (! (allowedExt == null || allowedExt.length == 0) ){ boolean extBoo = false; for (String ext: allowedExt) { if (ext.toLowerCase().equals(fileExt)) { extBoo = true; break; } } if (!extBoo){//不合法 throw new UploadException("请选择正确得文件格式,包含" + Arrays.toString(allowedExt)); } } List<FileItem> values; if (files.get(fieldName) != null) { values = files.get(fieldName); } else { values = new ArrayList<FileItem>(); } values.add(item); files.put(item.getFieldName(), values); } } } catch (FileUploadBase.SizeLimitExceededException e) { throw new UploadException("01-请求数据的size超出了规定的大小",e); } catch (FileUploadBase.FileSizeLimitExceededException e) { throw new UploadException("02-请求文件的size超出了规定的大小",e); } catch (FileUploadBase.IOFileUploadException e) { throw new UploadException("03-文件传输出现错误,例如磁盘空间不足等"); } catch (FileUploadBase.InvalidContentTypeException e) { throw new UploadException("04-无效的请求类型,即请求类型enctype != \"multipart/form-data\""); } catch (FileUploadException e) { throw new UploadException("00-上传失败,原因不明.",e); } catch (UnsupportedEncodingException e) { throw new UploadException("您提供编码不能识别["+ENCODING+"]",e); } return this; } /** * 模仿 request.getParameter() * @param name * @return */ public String getParameter(String name) { List<String> v = (List<String>) parameters.get(name); if (v != null && v.size() > 0) { return v.get(0); } return null; } /** * 模仿 request.getParameterNames(); * @return */ public Enumeration<String> getParameterNames() { return Collections.enumeration(parameters.keySet()); } /** * 模仿 request.getParameterValues(); * @param name * @return */ public String[] getParameterValues(String name) { List<String> v = parameters.get(name); if (v != null && v.size() > 0) { return (String[]) v.toArray(new String[v.size()]); } return null; } /** * 获取文本域的ContentType * @param fieldName * @return */ public String[] getContentType(String fieldName) { List<FileItem> items = (List<FileItem>) files.get(fieldName); if (items == null) { return null; } List<String> contentTypes = new ArrayList<String>(items.size()); for (int i = 0; i < items.size(); i++) { FileItem fileItem = (FileItem) items.get(i); contentTypes.add(fileItem.getContentType()); } return (String[]) contentTypes.toArray(new String[contentTypes.size()]); } /** * 模仿文本域得request.getParameterNames(); * @return */ public Enumeration<String> getFileParameterNames() { return Collections.enumeration(files.keySet()); } /** * 根据文本域表单名称获取文件 * @param fieldName * @return */ public File[] getFile(String fieldName) { List<FileItem> items = (List<FileItem>) files.get(fieldName); if (items == null) { return null; } List<File> fileList = new ArrayList<File>(items.size()); for (int i = 0; i < items.size(); i++) { DiskFileItem fileItem = (DiskFileItem) items.get(i); fileList.add(fileItem.getStoreLocation()); } return (File[]) fileList.toArray(new File[fileList.size()]); } /** * @param fieldName * @return */ public String[] getFileNames(String fieldName) { List<FileItem> items = files.get(fieldName); if (items == null) { return null; } List<String> fileNames = new ArrayList<String>(items.size()); for (int i = 0; i < items.size(); i++) { DiskFileItem fileItem = (DiskFileItem) items.get(i); fileNames.add(getCanonicalName(fileItem.getName())); } return (String[]) fileNames.toArray(new String[fileNames.size()]); } private String getCanonicalName(String filename) { int forwardSlash = filename.lastIndexOf("/"); int backwardSlash = filename.lastIndexOf("\\"); if (forwardSlash != -1 && forwardSlash > backwardSlash) { filename = filename.substring(forwardSlash + 1, filename.length()); } else if (backwardSlash != -1 && backwardSlash >= forwardSlash) { filename = filename.substring(backwardSlash + 1, filename.length()); } return filename; } /** * 该方法支持支持国际化 但是文件名不能超过17个汉字 而且在IE6下存在bug */ public void downloadI18NFile(HttpServletRequest request,HttpServletResponse response,File src,String showFileName) throws Exception { if (src == null || !src.exists() || src.length() == 0) { throw new RuntimeException("系统找不到可用资源!"); } java.io.BufferedInputStream bis = null; java.io.BufferedOutputStream bos = null; try { long fileLength = src.length(); showFileName = URLEncoder.encode(showFileName, "UTF-8"); String mimeType = request.getSession().getServletContext().getMimeType(src.getName()); mimeType = (mimeType != null)?(mimeType):("application/x-msdownload"); //"application/octet-stream" System.out.println("mimeType=" + mimeType); response.setContentType(mimeType); response.setHeader("Content-disposition", "attachment; filename=" + showFileName); //response.setHeader("Content-disposition", "filename=" //+ showFileName);//打开 response.setHeader("Content-Length", String.valueOf(fileLength)); bis = new BufferedInputStream(new FileInputStream(src)); 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) { throw new RuntimeException("下载失败",e); } finally { try { if (bis != null) bis.close(); }catch(IOException ex) { throw new RuntimeException("关闭资源失败",ex); }finally { try{ if (bos != null) bos.close(); }catch(IOException ex) { throw new RuntimeException("关闭资源失败",ex); } } } } /** * 下载文件. 支持中文,文件名长度无限制 不支持国际化 * @param request * @param response * @param src * @param showFileName * @throws Exception */ public void downloadFile(HttpServletRequest request,HttpServletResponse response,File src,String showFileName) { if (src == null || !src.exists() || src.length() == 0) { throw new RuntimeException("系统找不到可用资源!"); } java.io.BufferedInputStream bis = null; java.io.BufferedOutputStream bos = null; try { long fileLength = src.length(); bis = new BufferedInputStream(new FileInputStream(src)); //response.setContentType("text/html;charset=utf-8"); String mimeType = request.getSession().getServletContext().getMimeType(src.getName()); mimeType = (mimeType != null)?(mimeType):("application/x-msdownload"); //"application/octet-stream" response.setContentType(mimeType); //response.setContentType("application/x-msdownload;"); response.setHeader("Content-disposition", "attachment; filename=" + new String(showFileName.getBytes("GBK"), "ISO8859-1"));//打开、保存 //response.setHeader("Content-disposition", "filename=" //+ new String(showFileName.getBytes("GBK"), "ISO8859-1"));//打开 response.setHeader("Content-Length", String.valueOf(fileLength)); 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) { throw new RuntimeException("下载失败",e); } finally { try { if (bis != null) bis.close(); }catch(IOException ex) { throw new RuntimeException("关闭资源失败",ex); }finally { try{ if (bos != null) bos.close(); }catch(IOException ex) { throw new RuntimeException("关闭资源失败",ex); } } } } /** * @param req the request. * @return a new request context. */ private RequestContext createRequestContext(final HttpServletRequest req) { return new RequestContext() { public String getCharacterEncoding() { return req.getCharacterEncoding(); } public String getContentType() { return req.getContentType(); } public int getContentLength() { return req.getContentLength(); } public InputStream getInputStream() throws IOException { return req.getInputStream(); } }; } public Map<String, List<FileItem>> getFiles() { return files; } public void setFiles(Map<String, List<FileItem>> files) { this.files = files; } public Map<String, List<String>> getParameters() { return parameters; } public void setParameters(Map<String, List<String>> parameters) { this.parameters = parameters; } public static class UploadException extends Exception{ private static final long serialVersionUID = -6797554437005471992L; public UploadException() { super(); } public UploadException(String message, Throwable cause) { super(message, cause); } public UploadException(String message) { super(message); } public UploadException(Throwable cause) { super(cause); } } ////////////////////////////////////////////////////FileUtil public static String byteCountToDisplaySize(long size) { String displaySize; if (size / 1073741824L > 0L) displaySize = String.valueOf(size / 1073741824L) + " GB"; else if (size / 1048576L > 0L) displaySize = String.valueOf(size / 1048576L) + " MB"; else if (size / 1024L > 0L) displaySize = String.valueOf(size / 1024L) + " KB"; else { displaySize = String.valueOf(size) + " bytes"; } return displaySize; } }
- commons-fileupload-1.2.1.jar (56.4 KB)
- 下载次数: 4
- commons-io-1.4.jar (106.5 KB)
- 下载次数: 4
发表评论
-
String.format一些用法例子、功能强、希望对您有帮组
2010-05-29 14:06 7436String.format是在JDK1.5中新 ... -
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz
2009-12-24 19:33 8612最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这 ... -
Apache POI SpreadSheet的一些简单应用(二)
2009-12-22 10:16 2856我用的版本是 poi-3.5,您可以去官方上下载。希望对大家能 ... -
根据SQL结果集构建动态二维列表展示在excel中
2009-12-08 21:39 2029近期在项目中用到根据SQL结果集构建动态二维列表展示在exce ... -
JDBC读取一些元数据的常用方法
2009-12-07 16:02 5163JDBC读取一些元数据的常用方法,网上有很多这样的DEMO,在 ... -
java中的精确商务计算
2009-12-06 21:58 943由于计算机在计算过程中的舍入关系,普通的计算和工程计算可能会出 ... -
经常使用的一些克隆实现
2009-12-04 20:54 1338在实践中往往需要使用到克隆,您可以使用java本身提供的克隆实 ... -
Apache dbcp 数据源
2009-12-03 16:59 1337使用直连数据库的话效率比较低,人们就想出另外一种概念:数据库连 ... -
Apache POI SpreadSheet的一些简单应用(一)
2009-12-03 16:35 1885我用的版本是 poi-3.5,您可以去官方上下载。 希望对大家 ... -
java.text包中的DateFormat,NumberFormat一些用法
2009-12-03 15:36 2503import java.text.DateForm ... -
java类中多个时间类型的转换处理
2009-12-03 15:06 1509public class XZou { ... -
List列表中删除指定的多个对象,利用下标来实现
2009-12-03 14:47 2146import java.util.ArrayLis ... -
Excel中列号对应数字或数字对应列号
2009-12-03 14:38 2560public class XZou { p ...
相关推荐
上传下载工具类java,主要是用来进行上传下载的操作的工具类
图片的上传下载及工具类 上传图片,且在页面显示图片 上传下载的工具类
ftp 上传 下载 工具类 ftp 上传 下载 工具类 ftp 上传 下载 工具类 ftp 上传 下载 工具类
上传下载工具类, FileDownLoad.java
使用apache的common-net.jar,实现ftp文件的上传和下载,封装成工具类,方便开发。
本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中。开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成类。
java io 文件上传工具类
项目中添加该工具类,用一下语句调用 FTPUtil ftpUtil = new FTPUtil("172.16.1.41",21,"admin","123456"); ftpUtil.downLoadFile("20190913.txt","D:\\ftplocal\\20190913.txt"); ftpUtil.uploadFile&#...
主要用于图片的上传和下载,也可以用于文件的上传和下载
文件上传下载工具类单个文件上传,多种传参形式下载文件
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
java SFTP上传工具类
基于孤傲苍狼 的上传下载 封装的工具类
改工具是方便自己开发FTP上传下载需求写的,直接拿来就可以使用,方便那些自己懒得写,或者是想借鉴开发的人用。
本人一个项目中写的java基于commons文件上传工具类
分片上传文件工具类,对应文章为:https://blog.csdn.net/y534560449/article/details
采用java实现FTP文件的上传下载,包含文件以及文件夹上传下载,新建文件夹等基本相关操作,不会出现文件名的中文乱码,内含demo相关测试以及jar包,可直接导入使用,采用MyEclipse8.5,jdk1.6亲测无问题
总结了工作中所用到的两种图片上传 音频上传的工具类,欢迎使用
Android上传文件工具类