Spring Boot的文件上传

Spring Boot的文件上传并不需要单独进行。当前端进行请求时,所要上传的文件作为请求的一个参数即可,与其他类型参数相同。服务端接收时,只需要对这个文件参数使用MultipartFile类型接收即可。

由于文件上传的参数无法直接拼接到URL中,所以只能是post请求。

如图,用postman来测试,使用post请求,在body中共传入3个参数:

  • photo:图片文件。类型为File,Value选择本地的文件。
  • param0:字符串。
  • param1:字符串。

对于服务端,接收前端传入的这3个参数:

@RequestMapping(value = "/upload")
public Boolean upload(@RequestParam("photo") MultipartFile file, @RequestParam("param0") String param0,  @RequestParam("param1") String param1) {
    if (file == null) return false;
    try{
        String basePath = "D:/save/";
        FileInputStream fileInputStream = (FileInputStream) (file.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(basePath + file.getOriginalFilename()));
        byte[] bs = new byte[1024];
        int len;
        while ((len = fileInputStream.read(bs)) != -1) {
            bos.write(bs, 0, len);
        }
        bos.flush();
        bos.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

如上,使用MultipartFile接收文件,使用两个String来接收param0和param1。

然后操作File保存到本地即可。

 

通常的文件处理思路是:将文件保存在本地,其基础路径保存在配置文件中,同时要在tomcat中对该路径进行映射。然后将扩展路径和文件名保存在数据库中。当前端进行请求时,从数据库中取出扩展路径信息,发送给前端。前端将扩展路径与项目路径进行拼装来访问。

例如,服务端的地址为192.168.x.xx:8030,工程名为Template,图片的保存路径是D:/test/文件夹:

1.在Spring Boot中配置basePath

basePath = D:/test/

2.打开Tomcat的server.xml,在<Host>标签下添加一个<Context>标签用于映射:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

       <Context debug="0" docBase="D:/test" path="/Template/photo" reloadable="true"/>

       ...

</Host>

其作用是将docBase映射到path。这样,当访问Tomcat的path下的文件时,Tomcat就会去docBase下寻找该文件并返回。

3.前端向服务端发送请求并上传文件hello.jpg

4.服务端收到前端请求,将前端上传的文件以MultipartFile接收,然后希望保存在分类的文件夹下,例如:

D:/test/2018/11/hello.jpg

其中basePathD:/test/,所以扩展路径为2018/11/hello.jpg。扩展路径需要保存在数据库中。

服务端将接收到的MultipartFile以流的形式保存到D:/test/2018/11/hello.jpg。然后将2018/11/hello.jpg存入数据库。

5.前端向服务端请求图片。

6.服务端从数据库中取出图片扩展路径,为2018/11/hello.jpg。然后将该路径返回给前端。

7.前端收到扩展路径2018/11/hello.jpg,将服务端路径与扩展路径进行拼装,为:

192.168.x.xx:8030/Template/photo/2018/11/hello.jpg

然后使用该路径请求图片。

8.Tomcat收到请求,根据设置的映射路径,将包含/Template/photo在内的左侧路径转换为D:/test,于是图片地址变为D:/test/2018/11/hello.jpg。这样Tomcat就准确地取到了路径,并返回给前端。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值