spring boot 接收前端上传的图片

spring boot 接收前端上传的图片

spring boot 接收前端上传的图片,并储存到本地磁盘中,其实我不想存本地磁盘中,感觉很难移植,但是没找到其他方法。
参考文章:第一个文章链接第二个文章链接

Controller里的代码:

@RestController
@RequestMapping("/api")
public class UploadDownHandler {
    /**上传地址*/
    @Value("${file.upload.path}")
    private String path;

    /**图片url前缀*/
    @Value("${com.test.base_picture_url}")
    private String base_picture_url;

    /**
     * 上传图片
     * @param file
     * @param request
     * @return
     * @throws IOException
     */
    @ResponseBody
    @PostMapping("/uploadPicture")
    public JsonResult<Map> uploadPicture(@RequestParam("file")MultipartFile file, HttpServletRequest request) throws IOException{

        //String base_picture_url = "http://localhost:8080/image/";

        //获取文件在服务器的储存位置  
        File filePath = new File(path);
        System.out.println("文件的保存路径"+path);
        if(!filePath.exists() && !filePath.isDirectory()){
            System.out.println("目录不存在,创建目录" + filePath);
            filePath.mkdir();
        }

        //获取原始文件名称(包括格式)
        String originalFileName = file.getOriginalFilename();
        System.out.println("原始文件名称" + originalFileName);

        //获取文件类型,以最后一个‘.’为标识
        String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
        System.out.println("文件类型" + type);

        //获取文件名称(不包含格式)
        String name = originalFileName.substring(0,originalFileName.lastIndexOf("."));

        //设置文件新名称:当前事件+文件名称(不包含格式)
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String date = sdf.format(d);
        String fileName = date + name + "." +type;
        System.out.println("新文件名称" +fileName);

        //在指定路径下创建文件
        File targetFile = new File(path,fileName);

        Map<String,Object> result = new HashMap<String,Object>();//定义结果
        //将文件保存到服务器指定位置
        try{
            file.transferTo(targetFile);
            System.out.println("上传成功");

        }catch (IOException e){
            System.out.println("上传失败");
            result.put("code",400);
            e.printStackTrace();
            return new JsonResult<>(result);
        }

        result.put("code",200);
        result.put("picture",base_picture_url+ fileName);
        System.out.println(result);
        return new JsonResult<>(result);

    }
}

配置映射路径:

@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    /**上传地址*/
    @Value("${file.upload.path}")
    private String filePath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       
        registry.addResourceHandler("/image/**").addResourceLocations("file:/" + filePath);
    }
}

在配置文件中增加路径:
在 application.properties中

file.upload.path=E://img/
com.test.base_picture_url=http://localhost:8080/image/

我把localhost换成自己电脑的ip地址了
这样前端就获取到了图片的url地址。http://10.2.22.10:8080/image/cat.jpg 形如这样

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我可以回答这个问题。Spring Boot 可以通过使用 MultipartFile 类型的参数来接收文件。例如,可以在控制器方法中使用 @RequestParam 注解来接收文件参数,如下所示: ``` @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 return "上传成功"; } ``` 在上面的代码中,我们使用 @PostMapping 注解来指定处理 POST 请求的方法,使用 @RequestParam 注解来指定接收的文件参数名为 "file",并将其绑定到 MultipartFile 类型的 file 参数中。在方法中,我们可以编写处理文件上传的逻辑,最后返回上传成功的消息。 希望这个回答能够帮助到你。 ### 回答2: 在Spring Boot中,可以使用MultipartFile类来接收文件。这个类是Spring框架提供的,用于处理文件上传的封装类。接收文件的过程可以通过以下步骤完成: 首先,需要在Controller中定义一个接口,用来接收文件。可以使用@RequestParam注解来指定接收文件的参数名,并将参数类型设置为MultipartFile。例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 return "成功接收到文件:" + file.getOriginalFilename(); } ``` 在上述例子中,文件参数名为"file",文件上传成功后,会返回一个包含文件名的成功信息。 在接口中,我们可以用MultipartFile对象获取文件的各种信息,例如原始文件名、文件大小、文件内容等。可以使用以下方法: - file.getOriginalFilename():获取文件的原始名称。 - file.getSize():获取文件的大小。 - file.getBytes():获取文件的内容字节数组。 接收文件后,可以进行一些文件处理的操作,例如将文件保存到本地磁盘或存储到数据库中等。 需要注意的是,在进行文件上传时,还需要设置正确的请求头以及文件大小限制等。这些可以在application.properties或application.yml中进行配置。例如: ```yaml spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 上述例子中,限制了上传文件的最大大小为10MB。 总结起来,通过使用MultipartFile类,结合@RequestParam注解,我们可以轻松实现Spring Boot接收文件的功能。在接收文件后,可以进行一些后续的文件处理操作。需要注意配置文件上传的一些限制,以保证安全和性能。 ### 回答3: 使用Spring Boot接收文件可以通过以下步骤完成: 1. 配置文件上传的最大限制:在application.properties中添加以下配置,设置文件上传的最大大小限制。 ``` spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 2. 创建Controller类:创建一个Controller类,用于接收文件上传的请求。 ```java @RestController public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理上传的文件 // 文件可以通过file.getInputStream()获取,也可以通过file.getBytes()获取字节数组 // 返回上传成功的消息 return "File uploaded successfully."; } } ``` 3. 启用文件上传:在应用的启动类上添加`@EnableMultipart`注解,启用文件上传功能。 ```java @SpringBootApplication @EnableMultipart public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 4. 创建文件上传表单:在前端页面中创建一个表单,用于上传文件。 ```html <form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form> ``` 这样,当用户选择文件并点击“上传”按钮时,文件将被发送到`/upload`接口,然后在Controller类中使用`@RequestParam("file")`注解接收文件。可以在该方法中处理文件(如保存到磁盘、处理文件内容等),然后返回上传成功的消息给用户。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值