设为首页 加入收藏

TOP

day12-SpringMVC文件上传(二)
2023-07-25 21:43:25 】 浏览:74
Tags:day12-SpringMVC 文件上
) public String fileUpload(@RequestParam(value = "file") MultipartFile multipartFile, HttpServletRequest request, String introduce) throws IOException { //接收到提交的文件名 String originalFilename = multipartFile.getOriginalFilename(); System.out.println("你上传的文件介绍=" + introduce); System.out.println("你上传的文件名=" + originalFilename); //得到上传的文件要保存的路径[全路径:包括文件名] //这里其实是out目录下的路径 String fileFullPath = request.getServletContext().getRealPath("/img/" + originalFilename); //创建文件 File saveToFile = new File(fileFullPath); //将上传文件转存到 saveToFile multipartFile.transferTo(saveToFile); return "success"; } }

(7)启动 tomcat,访问 fileUpload.jsp,选择文件上传

image-20230217204739917

后台输出:

image-20230217205540158

上传的文件:

这里只是模拟,真正开发中不会将文件存放在项目目录中,而是存放在主机的另外的磁盘上,每次存放文件时会将存放路径保存到数据库中。下载文件时会读取数据库数据,得到路径,寻找文件。

image-20230217204906903

postman 也可以进行文件上传:

image-20230217220956037

3.transferTO()方法

@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
    //首先判断该文件(路径)在磁盘中是不是可获取的
   if (!isAvailable()) {
      throw new IllegalStateException("File has already been moved - cannot be transferred again");
   }

    //判断上传的文件在磁盘中存不存在,如果存在就会去尝试删除该文件,如果删除失败,就会抛出异常
   if (dest.exists() && !dest.delete()) {
      throw new IOException(
            "Destination file [" + dest.getAbsolutePath() + "] already exists and could not be deleted");
   }

    //如果文件不存在,或者存在但删除成功了
   try {
       //将上传的文件拷贝到目标目录 dest 下
       //this.fileItem 就是你要上传文件的临时文件(tmp文件)
       //就是说 SpringMVC 上传文件也是先将上传文件保存为临时文件,然后再拷贝为目标文件
      this.fileItem.write(dest);
      LogFormatUtils.traceDebug(logger, traceOn -> {
         String action = "transferred";
         if (!this.fileItem.isInMemory()) {
            action = (isAvailable() ? "copied" : "moved");
         }
         return "Part '" + getName() + "',  filename '" + getOriginalFilename() + "'" +
               (traceOn ? ", stored " + getStorageDescription() : "") +
               ": " + action + " to [" + dest.getAbsolutePath() + "]";
      });
   }
   catch (FileUploadException ex) {
      throw new IllegalStateException(ex.getMessage(), ex);
   }
   catch (IllegalStateException | IOException ex) {
      // Pass through IllegalStateException when coming from FileItem directly,
      // or propagate an exception from I/O operations within FileItem.write
      throw ex;
   }
   catch (Exception ex) {
      throw new IOException("File transfer failed", ex);
   }
}
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于静态代码块和匿名代码块以及.. 下一篇工具类-获取控制台输入

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目