Javaweb文件的上传与下载
2016-05-18 21:43
399 查看
文件的上传与下载
2016/4/21 8:12:12 SeventeenWen使用*cos*JAR包,支持多文件上传,但不支持文件改名。
POST上传功能代码的实现:
/获取配置文件中的文件夹路径 String str = this.getServletConfig().getServletComtext().getRealPath ("/"+folder) /控制文件上传的大小 int max =2*5*1024*1024; MultipartRequest mr = new MultipartRequest(request,str,max,"GBK");
遇到的问题
表单没有提交到指定的Servlet,解决的方案:-web.xml文件的配置不对。/Servlet
-注意JSP文件的大小写和默认生成的web.xml中的对应。
文件上传的位置问题
-文件上传位置是.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
Servlet的限制
request。getParmatere(“xxx”);这个方法在表单属性为enctype=“multipart、form-data”时,不好使。ServletInputStream request.getInputStream();获取的整个表单的数据。
通过ServletFileUpload实现文件的上传
使用的JAR包:commons-fileupload.jar和commons-io.jar创建工厂:DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
创建解析器:ServletFileUpload
ServletFileUpload sfu = new ServletFileUpload(factory);
使用解析器来解析request,得到FileItem(表单项)集合:
List<FileItem> fileItemList = sfu.parseRequest(request);
FileItem的方法
boolean isFormField():是否为普通表单项!返回true为普通表单项,如果为false即文件表单项!String getFieldName():返回当前表单项的名称;
String getString(String charset):返回表单项的值;
String getName():返回上传的文件名称
long getSize():返回上传文件的字节数
InputStream getInputStream():返回上传文件对应的输入流
void write(File destFile):把上传的文件内容保存到指定的文件中。
String getContentType();
简单的实例
// 得到文件上传保存文件目录,将上传的文件保存在这个目录下 String savePath = this.getServletContext.getRealPath("/WEB-INF/upload"); // 得到文件上传是生成的临时文件夹,将文件的缓冲放在这个目录 String tempPath = this.getServletContext.getRealPath("WEB-INF/emp"); // 判断一下缓冲文件是否存在 File tempFile = new File(tmpPath); if(!tempFile.isexists()){ tempFile.miker(); /////////////////////////////////////////////////// //| 使用ServletUploadFile 上传步骤: / //| 1.创建Factory, / //| 2.创建解析器, / //| 3.使用解析器解析表单 / /////////////////////////////////////////////////// DiskFileItemFactory factory = new DiskFileFactory(); // 设置缓冲区大小,默认为10K, factory.setSizeThreshol(1024*100); // 设置缓存文件的保存目录 factory.setRepository(tempFile); ServletFactoryUpload upload = new ServletFactoryUpload(factory); // 设置监听器,监听上传进度 upload.setProgressListener(new ProgressListener()){ @Override public void update(long pBytesRead,long pContentLength,int arg2){ System.out.print("文件上传大小:"+pByetesRead); } }); upload.setHeaderEncoding("UTF-8"); // 限制上传文件 upload.setFileSizeMax(1024*1024); // 设置同时上传文件的总量 upload.setSizeMax(10*1024*1024); // 用解析器上传数据,返回一个List<FileItem>集合,每一个FileItem对应一个From表单输入项 List<FileItem> list = upload.parseRequest(request); // 遍历List集合 for(FileItem item : list){ if(item.isFromFiled()) String name = item.getName(); String content = item.getString("UTF-8"); System.out.println("name+content"); } else{ String filename = item.getName(); System.out.println(filename); // 获得文件的类型 String fileExtName = filename.substring(filename.lastIndexOf(".")+1); System.out.println("文件的类型为:"+fileExtName); InputStream is = item.getInpuStream(); Sring saveFilename =uuidFilename(String name); String realSavePath = makePath(saveFilename,savePath); FileOutputStream out = new FileOutputStream(realSavaPath+"\\"+saveFilename); FileItem fileItem = fileItem.get(1); } // 处理同名文件的方法UUID private String uuid(String name){ return UUID.randomUUID().toString().replace("-","").toUpperCase()+"_"+filename; } // 处理出现太多文件夹 private File makePath(String savaFilename,String savePath){ // 获取文件名生成的哈希值 int hex = filename.hashCode(); // 取哈希值的第四位 String dir1 = Integer.toHexString(hex&0xf); // 去哈希值的高四位 String dir2 = Integer.toHexString(hex>>>4&0xf); String newSavePath = savePath+"/"+dir1+"/"+dir2; // File file = new File(newSavePath); if(!file.exists()){ file.mikders(); } return newSavePath; } }
相关文章推荐
- springmvc笔记(1)
- Java进阶笔记(装饰者模式)
- 如何解决java线程中的资源共享的问题
- 【转】springmvc源码分析链接
- java之Intager比较
- HDU 1850 —— Being a Good Boy in Spring Festival
- Java集合类的继承关系
- Servlet
- java知识点及初学类
- Java单例模式详解
- java程序读取文件内容打印控制台
- Java基础简单的动态绑定问题
- 利用java与链表的实现与应用
- Java文件流 字节流和字符流
- 深入浅出: Java回调机制(异步)
- JAVA获取本机IP地址
- java中重载和重写
- JAVA-007前面所学总结加深
- java工具类-排序介绍
- Java基础 - 1.1-Java 语言特性及其基本语法