分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

文件的上传

发布时间:2023-09-06 01:07责任编辑:赖小花关键词:暂无标签
  • 文件上传的必要前提
  1. 提供form表单,提交方式method必须为post
  2. form表单的enctype(告知服务器请求正文的MIME类型)必须是:multipart/form-data
  3. 提供 <input type="file"> 上传的输入域
  • 借助第三方的上传组件实现文件上传
  1. fileupload是由apache的commons组件提供的上传组件。它最主要的工作就是帮我们解析request.getInputStream()。
  2. 导入相关的jar

              l  commons-fileupload.jar,核心包

              l  commons-io.jar,依赖包

  • fileupload的核心类      
  1. DiskFileFactory
  2. ServletFileUpload
  3. FileItem
 1 import java.io.File; 2 import java.util.HashMap; 3 import java.util.List; 4 import java.util.Map; 5 ?6 import javax.servlet.http.HttpServletRequest; 7 ?8 import org.apache.commons.fileupload.FileItem; 9 import org.apache.commons.fileupload.disk.DiskFileItemFactory;10 import org.apache.commons.fileupload.servlet.ServletFileUpload;11 import org.apache.commons.io.FilenameUtils;12 13 public class MyFileUpload {14 15 ????public static Map<String,String[]> getFileUpload(HttpServletRequest request){16 ????????//1获取表单数据17 ????????//*1.1创建工厂类DiskFileItemFactory对象18 ????????DiskFileItemFactory factory = new DiskFileItemFactory();19 ????????//*1.2使用工厂创建解析对象20 ????????ServletFileUpload fileUpload = new ServletFileUpload(factory);21 ????????//*1.3使用解析器来解析request对象22 ????????//用于封装普通表单项的数据23 ????????Map<String, String[]> map = new ?HashMap<String,String[]>();24 ????????25 ????????try {26 ????????????List<FileItem> list = fileUpload.parseRequest(request);27 ????????????for (FileItem item : list) {28 ????????????????if(item.isFormField()){ ??29 ????????????????????//如果里面封装的是普通数据30 ????????????????????String name = item.getFieldName(); //字段名31 ????????????????????String value = item.getString("UTF-8"); //字段的值32 ????????????????????map.put(name,new String[]{value});33 ????????????????}else{ ???????????????????34 ????????????????????//里面是文件表单数据35 ????????????????????String filename = item.getName();//上传的文件名36 ????????????????????String extension = FilenameUtils.getExtension(filename);//文件的扩展名37 ????????????????????//上传的文件的扩展名不能是jsp和exe38 ????????????????????if(!(extension.equals("jsp")||extension.equals("exe"))){39 ????????????????????????//创建目录40 ????????????????????????File storeDir = new File(request.getServletContext().getRealPath("/WEB-INF/upload"));41 ????????????????????????if(!storeDir.exists()){42 ????????????????????????????storeDir.mkdirs(); ?//目录不存在就创建目录43 ????????????????????????}44 ????????????????????????//处理文件名45 ????????????????????????if(filename !=null&&(!"".equals(filename))){46 ????????????????????????????filename = FilenameUtils.getName(filename);47 ????????????????????????}else{48 ????????????????????????????continue;49 ????????????????????????}50 51 ????????????????????????//目录打散52 ????????????????????????String childDir = makeChildDir(storeDir,filename);53 ????????????????????????filename = childDir+File.separator+filename;54 ????????????????????????//System.out.println(storeDir); ???????????????????55 ????????????????????????try {56 ????????????????????????????item.write(new File(storeDir,filename));//!!!!!!!存储路径57 ????????????????????????????item.delete();58 ????????????????????????} catch (Exception e) {59 ????????????????????????????e.printStackTrace();60 ????????????????????????}61 ????????????????????????map.put(item.getFieldName(), new String[]{filename});62 ????????????????????}63 ????????????????}64 ????????????}65 ????????} catch (Exception e) {66 ????????????e.printStackTrace();67 ????????}68 ????????return map;69 ????}70 ????private static String makeChildDir(File storeDir, String filename) {71 ????????int hashcode = filename.hashCode(); //返回字符串转换的32位的hashcode码72 ????????String code = Integer.toHexString(hashcode);//把hashcode转换为16进制的字符73 74 ????????String childDir = code.charAt(0)+File.separator+code.charAt(1);// ?a/b75 ????????//创建指定目录76 ????????File file = new File(storeDir,childDir); //根据storeDir的路径创建一个新的childDir路径77 ????????if(!file.exists()){78 ????????????file.mkdirs();79 ????????}80 ????????return childDir;81 ????}82 83 }

文件的上传

原文地址:http://www.cnblogs.com/id-666/p/7461107.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved