为啥我上传文件后会报错

为啥我上传文件后会报错

http://img1.sycdn.imooc.com//climg/5cef994c00014b9c12870584.jpg

http://img1.sycdn.imooc.com//climg/5cef995700012de504430403.jpg

package com.mason.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 文件上传的工具类
 * 
 */
public class UploadUtils {

   /**
    * 生成唯一的文件名:
    */
   public static String getUUIDFileName(String fileName){
      // 将文件名的前面部分进行截取:xx.jpg   --->   .jpg
      int idx = fileName.lastIndexOf(".");
      String extention = fileName.substring(idx);
      String uuidFileName = UUID.randomUUID().toString().replace("-", "")+extention;
      return uuidFileName;
   }
   
   public static Map uploadFile(HttpServletRequest request) throws IOException {
      Map<String,String> map = new HashMap<String,String>();
      // 1.创建一个磁盘文件项工厂对象
      DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
      // 2.创建一个核心解析类
      ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
      // 3.解析request请求,返回的是List集合,List集合中存放的是FileItem对象
      String url = null;
      String uuidFileName= null;
      try {
         List<FileItem> list = servletFileUpload.parseRequest(request);
         for (FileItem fileItem : list) {
            if(fileItem.isFormField()){
               // 不是文件上传
               // 接收表单项参数的值:
               //如:<input name="name" value="aaa">
               String name = fileItem.getFieldName(); // 获得表单项的name属性的值  name
               String value = fileItem.getString("UTF-8");// 获得表单项的值  aaa
               // 存入集合
               map.put(name, value);
            }else{
               // 文件上传
               // 文件上传项:
               // 文件上传功能:
               // 获得文件上传的名称:
               String fileName = fileItem.getName();
               System.out.println("filename="+fileName);
               if(fileName !=null && !"".equals(fileName)){
                  // 通过工具类获得唯一文件名:
                  uuidFileName = UploadUtils.getUUIDFileName(fileName);
                  // 获得文件上传的数据:
                  InputStream is = fileItem.getInputStream();
                  // 获得文件上传的路径:
                  String path = request.getServletContext().getRealPath("/upload");
                  // 将输入流对接到输出流就可以了:
                  url = path+"\\"+uuidFileName;
                  OutputStream os = new FileOutputStream(url);
                  int len = 0;
                  byte[] b = new byte[1024];
                  while((len = is.read(b))!=-1){
                     os.write(b, 0, len);
                  }
                  is.close();
                  os.close();
                  
                  map.put("path", request.getContextPath()+"/upload/"+uuidFileName);
                  map.put("filename", fileName);
               }
               System.out.println(map);
            }
         }
      } catch (FileUploadException e) {
         e.printStackTrace();
      }
      
      return map;
   }
   
   public static void main(String[] args) {
      System.out.println(getUUIDFileName("1.jpg"));
   }
}

http://img1.sycdn.imooc.com//climg/5cef997c000186ac03590077.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,建议同学刷新一下项目或者重启idea试试哦~

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • MasonM 提问者 #1
    不行呀老师,还是这样
    2019-05-30 19:11:38
提问者 MasonM 2019-05-30 17:01:10

因为我使用的是IDEA,然后我仔细查看了报错

http://img1.sycdn.imooc.com//climg/5cef9aa4000193dc12600075.jpg

发现它是在out这个文件夹找不到upload文件夹,然后我打开这个文件夹,并手动新建了upload文件夹

http://img1.sycdn.imooc.com//climg/5cef9add0001fa9107310386.jpg

然后现在就不报错了,正常上传文件了http://img1.sycdn.imooc.com//climg/5cef9bbe0001407a16820116.jpg

但是我有个疑问!!!!

为什么我原本是已经在Web文件夹下已经创建好了upload的,为什么out这里面他会没有upload的呢?

http://img1.sycdn.imooc.com//climg/5cef9b3f0001df8204390389.jpg

而且我发现,我成功上传文件后,在

http://img1.sycdn.imooc.com//climg/5cef9b5c000136c005890217.jpg

这里的upload是空的,而在这的upload才有东西在↓

http://img1.sycdn.imooc.com//climg/5cef9bcb000147f107450309.jpg

这是为什么呢??好奇怪啊

  • idea有个缺点,它不发布空的文件夹,如果你创建项目的时候,在web下的upload为文件夹下放个随便什么文件的话,文档也好,图片也好,这个文件夹就会被发布了。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-05-31 11:01:18
  • 提问者 MasonM 回复 好帮手慕阿莹 #2
    真的如老师说的一样,谢谢老师!但老师你在我提问下面回答,我没法给你采纳哟,但还是非常感谢你!!
    2019-05-31 21:29:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师