springboot文件上传保存路径的问题

目录
  • springboot文件上传保存路径
    • 配置代码如下
  • Springboot上传文件的问题(上传到本地文件夹中)
    • 先建立一个controller包
    • 静态资源目录如下

springboot文件上传保存路径

最近使用springboot整合富文本编辑器wangeditor,在整合的时候,对于图片上传时候保存路径出现了一些问题,代码如下

    @PostMapping("/upload")
    public Result upload(MultipartFile[] file, HttpServletRequest request) throws IOException {
        Result result = new Result();
        String path = request.getServletContext().getRealPath("/public/image/upload");
        System.out.println(file.length);
        for (MultipartFile f : file) {
            String name = f.getOriginalFilename();
            f.transferTo(new File(path+File.separator+name));
            result.getData().add("/public/image/upload/"+name);
        }
        return result;
    }

报了如下异常

java.io.IOException: java.io.FileNotFoundException: C:\Users\22374\AppData\Local\Temp\
tomcat-docbase.262090075120668420.9003\public\image\upload\demo0.png (系统找不到指定的路径。)

我到了相应路径下查看,路径下确实没有这些文件,因为springboot直接以jar包的方式直接运行,应该是jar包运行时生成的相关路径,并没有深入研究原理。这里并不像tomcat下部署那样,文件夹确实存在,并且可读取。所以只能采用其他方案。

在我们在tomcat下做文件上传时候,我们也并不会直接在项目下面的相关路径下保存上传的文件,因为如果这样保存,项目重新部署,文件就没了。通常是配置tomcat,映射一个静态文件夹,用来存放上传的文件,这样在项目升级重新部署,文件依然存在。现在要解决的问题是,如何使用springboot配置静态文件夹。

配置代码如下

spring:
  mvc:
    static-path-pattern: /**
  resources:
    static-locations:
    - classpath:/META-INF/resources/
    - classpath:/static
    - classpath:/resources/
    - file:${upload-path}
upload-path: F:/Java/upload/

关键的代码就是file:${web.upload-path},这个file是配置一个文件路径做作为静态资源映射,而upload-path: F:/Java/upload/是配置路径的实际位置。其余的代码,因为自己重新配置静态资源映射,所以默认配置失效,自己要重新配置一下。

当然除了配置文件配置,还可以自己继承WebMvcConfigurerAdapter类来配置静态资源映射,当然这是低版本的springboot,高版本的继承WebMvcConfigurerationSupport实现。

Springboot上传文件的问题(上传到本地文件夹中)

先建立一个controller包

如图所示:

FileUploadController.java代码如下所示:

package com.zcc.springboot_uploadfiles.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@RestController
public class FileUploadController {
    SimpleDateFormat sdf = new SimpleDateFormat("yyy/MM/dd/");
    @PostMapping("/upload")
    public String upload(MultipartFile uploadFile, HttpServletRequest req) {
        String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
        String format = sdf.format(new Date());
        String file = realPath + format;
        File folder = new File(realPath + format);
        if(!folder.isDirectory()) {
            folder.mkdirs();
        }
        String oldName = uploadFile.getOriginalFilename();
        String newName = UUID.randomUUID().toString() +
                oldName.substring(oldName.lastIndexOf("."), oldName.length());
        try {
            // 文件保存操作
            uploadFile.transferTo(new File(folder, newName));
            return file;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }
}

这里我们是上传在了默认文件夹里面,

我的是

这个文件夹下。

当然你也可以根据自己的意愿放在自己想要的文件下面,此时需要改变以上的一点代码():

//file 这里是我自己想要的文件夹
 String file = "E:\\IDEA01\\学习springboot\\springboot_uploadfiles\\src\\main\\resources\\static\\uploadFile";
 File folder = new File(file);

此时会出现上传的文件

静态资源目录如下

因为主要是演示上传文件,所以HTML文件比较简陋

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决springboot MultipartFile文件上传遇到的问题

    1.ajax传过去的参数在controller接受不到 解决:在contoller中增加@RequestParam 例如:saveUploadFile( @RequestParam("file") MultipartFile file,HttpServletRequest request) 2.org.springframework.web.multipart.support.MissingServletRequestPartException: Required request pa

  • Spring Boot应用上传文件时报错的原因及解决方案

    问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location is not valid". 原因追踪 这个问题的根本原因是Tomcat的文件上传机制引起的! Tomcat在处理文件上传时,会将客户端上传的文件写入临时目录,这个临时目录默认在/tmp路径下,如:"/tmp/tomcat.6574404581312272268.18333/work/T

  • SpringBoot上传文件到本服务器 目录与jar包同级问题

    前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了.当你使用File file = new File()的时候根本不知道这个路径怎么办.而且总不能很小的项目也给它构建一个文件服务器吧.所以这次就来解决这样的问题. 不想知道细节的,可以直接跳转到最后封装的部分,里面

  • Springboot文件上传出现找不到指定系统路径的解决

    目录 Springboot文件上传出现找不到指定系统路径 1.问题描述 2.问题分析 3.问题解决方案 SpringBoot 上传文件时本地路径无效 错误产生的原因 解决方式有以下几点 Springboot文件上传出现找不到指定系统路径 1.问题描述 关键字:SpringMVC 4.2.4.Spring Boot 1.3.1.Servlet 3.0.文件上传 报错信息: java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat

  • springboot文件上传保存路径的问题

    目录 springboot文件上传保存路径 配置代码如下 Springboot上传文件的问题(上传到本地文件夹中) 先建立一个controller包 静态资源目录如下 springboot文件上传保存路径 最近使用springboot整合富文本编辑器wangeditor,在整合的时候,对于图片上传时候保存路径出现了一些问题,代码如下 @PostMapping("/upload") public Result upload(MultipartFile[] file, HttpServle

  • SpringBoot文件上传控制及Java 获取和判断文件头信息

    之前在使用SpringBoot进行文件上传时,遇到了很多问题.于是在翻阅了很多的博文之后,总算将上传功能进行了相应的完善,便在这里记录下来,供自己以后查阅. 首先,是建立一个标准的SpringBoot 的工程,这里使用的IDE是Intellij Idea,为了方便配置,将默认的配置文件替换为了application.yml. 1.在index.html中进行文件上传功能,这里使用的文件上传方式是ajax,当然也可以按照自己的具体要求使用传统的表单文件上传. <!DOCTYPE html> &l

  • SpringBoot 文件上传和下载的实现源码

    本篇文章介绍SpringBoot的上传和下载功能. 一.创建SpringBoot工程,添加依赖 compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-thymeleaf") 工程目录为: Application.java 启动类 package hello; import org.springf

  • 解决SpringBoot文件上传临时目录找不到的问题

    SpringBoot文件上传临时目录问题 我相信大家在把项目部署到服务器上面时候都会遇到这样一个问题: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.133776721859504205

  • SpringBoot文件上传与下载功能实现详解

    目录 前言 1.引入Apache Commons FileUpload组件依赖 2.设置上传文件大小限制 3.创建选择文件视图页面 4.创建控制器 5.创建文件下载视图页面 前言 文件上传与下载是Web应用开发中常用的功能之一,在实际的Web应用开发中,为了成功上传文件,必须将表单的method设置为post,并将enctype设置为multipart/form-data 只有这样设置,浏览器才能将所选文件的二进制数据发送给服务器 从Servlet3.0开始,就提供了处理文件上传的方法,但这种文

  • SpringBoot文件上传同时接收复杂参数的过程详解

    目录 环境信息 问题描述 错误分析 解决方法 简单参数 总结 环境信息 Spring Boot:2.0.8.RELEASE Spring Boot内置的tomcat:tomcat-embed-core 8.5.37 问题描述 收到文件上传的开发工作,要求能适配各种场景,并且各场景的请求参数不一样,因此接收的参数不能是固定的几个字段,要有类似Map的字段来接收动态参数. 拟使用MultipartFile[] files来接收文件列表,用自定义对象UploadFileDto来接收上传参数(里面包含一

  • springboot 文件上传大小配置的方法

    springboot上传文件大小的配置我这里记录两种,一种是设置在配置文件里只有两行代码,一种是加个Bean 首先第一种: application.properties中添加 spring.http.multipart.maxFileSize=10Mb spring.http.multipart.maxRequestSize=10Mb maxFileSize 是单个文件大小 maxRequestSize是设置总上传的数据大小 这就可以了. 根据自己需求定义吧,Mb和Kb都可以,大小写也都随意,L

  • 详解SpringBoot文件上传下载和多文件上传(图文)

    最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的Java代码: 1.开发环境: IDEA15+ Maven+JDK1.8 2.新建一个maven工程: 3.工程框架 4.pom.xml文件依赖项 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation

  • SpringBoot文件上传大小设置方式(yml中配置)

    目录 文件上传大小设置 上传文件大小yml参数配置 解决方法 文件上传大小设置 #文件大小 MB必须大写 #  maxFileSize 是单个文件大小 #  maxRequestSize是设置总上传的数据大小 spring:   servlet:     multipart:       enabled: true       max-file-size: 20MB       max-request-size: 20MB 提示: 必须配置,如果采用默认的配置,稍大的文件就不能上传了. 上传文件

随机推荐