Jsp文件上传

来源:互联网 发布:淘宝确认收货是什么 编辑:程序博客网 时间:2024/06/08 09:25

用户常常需要上传一些文件给系统,所以就涉及到了web的文件上传。首先要在from表单中 声明 method="post" enctype="multipart/form-data"两个属性,这是必不 可少的。

然后在服务器接收参数的时候就麻烦了,

// 接收用户上传的方法public String upload(HttpServletRequest request, HttpServletResponse response) {// 准备获取数据Map<String, String> parameter = new HashMap<String, String>();// 字段参数表,用于存储字段参数
                String songUrl = "";String coverUrl = "";String lrcUrl = "";
                String id = UUID.randomUUID().toString();// 准备文件上传String fileName = null;// 文件名InputStream in = null;// 文件输入流FileOutputStream out = null;// 文件输出流File filePath = null;// 文件存储路径// 创建磁盘工厂,调用第三方jar包commons-fileupload-1.3.3.jarDiskFileItemFactory factory = new DiskFileItemFactory();// 创建工厂核心对象ServletFileUpload sfu = new ServletFileUpload(factory);// 核心对象解析请求try {List<FileItem> parseRequest = sfu.parseRequest(request);// 遍历文件项:字段或文件for (FileItem fileItem : parseRequest) {if (fileItem.isFormField()) {// 拿到字段,封装内容到map集合parameter.put(fileItem.getFieldName(), fileItem.getString("utf-8"));} else {// 拿到文件fileName = fileItem.getName();in = fileItem.getInputStream();// 存储文件
                                        //通过文件名采用不同的方法存到本地,单一文件上传可不要if-elseif (fileItem.getFieldName().equals("song")) {// 存储音频// 获取文件后缀名
                                                //分割文件名String[] str = fileName.split("\\.");//注意“.”是要用转义字符的// 存入数据库的地址,每个人要存的地方不一样,一般来说存能访问的地址或本地存放地址,注意一下songUrl = SyayicParameter.song_path + id + "." + str[str.length - 1];//这里我调用的是一个静态属性filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\song");// 文件存放路径//检查文件是否已经存在
                                               if (!filePath.exists()) {filePath.mkdirs();}out = new FileOutputStream(filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);
                                                 //调用第三jar包commons-io-2.5.jarIOUtils.copy(in, out);} else if (fileItem.getFieldName().equals("cover")) {// 存储封面String[] str = fileName.split("\\.");// 存入数据库的地址if (fileName.equals("")) {// 用户未上传封面coverUrl = StaticParameter.cover_path + "default.png";} else {coverUrl = StaticParameter.cover_path + id + "." + str[str.length - 1];// 存入本地的地址filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\cover");if (!filePath.exists()) {filePath.mkdirs();}out = new FileOutputStream(filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);IOUtils.copy(in, out);}} else if (fileItem.getFieldName().equals("lrc")) {// 储存歌词String[] str = fileName.split("\\.");// 存入数据库的地址if (fileName.equals("")) {// 用户未上传歌词lrcUrl = StaticParameter.lrc_path + "default.lrc";} else {lrcUrl = StaticParameter.lrc_path + id + "." + str[str.length - 1];// 存入本地的地址filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\lrc");if (!filePath.exists()) {filePath.mkdirs();}out = new FileOutputStream(filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);IOUtils.copy(in, out);}}}}
                         //其他参数存入数据库if (ss.addSong(id, parameter.get("name"), songUrl, coverUrl, lrcUrl, parameter.get("author"),new Timestamp(System.currentTimeMillis()), 0, parameter.get("upper"))) {return null;}} catch (Exception e) {e.printStackTrace();}return null;}