Spring boot 文件上传与文件转发

Spring boot 文件上传与文件转发
开发过程中应该离不开文件上传这一关的吧
   例如:  即时通讯和各种社交网站啊,为了让人关注到自己,也为了把自己更好的介绍给别人,头像上传,财务系统  想到财务就想到了excel   整天和excel打交道的人   excel上传,批量数据等
那么Spring boot里面怎么来实现文件上传呢?以及如果只是做文件上传的中转站而目标服务器是在其它地方呢?
Spring boot 文件上传与文件转发_第1张图片
新引入的包

[XML] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

<dependency>

            <groupId>org.apache.httpcomponentsgroupId>

            <artifactId>httpmimeartifactId>

            <version>4.5.10version>

        dependency>

        <dependency>

            <groupId>org.apache.httpcomponentsgroupId>

            <artifactId>httpclientartifactId>

            <version>4.5.10version>

        dependency>

  

        

  

        <dependency>

            <groupId>commons-fileuploadgroupId>

            <artifactId>commons-fileuploadartifactId>

            <version>1.3.1version>

        dependency>


文件转发的工具类

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

package com.example.demo.util;

  

import java.io.IOException;

import java.nio.charset.Charset;

  

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.ContentType;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.springframework.web.multipart.MultipartFile;

  

  

public class HttpClientUtil {

  

    public static String httpClientUploadFile(String url,MultipartFile file) {

//        String remote_url = url;// 第三方服务器请求地址

        CloseableHttpClient httpClient = HttpClients.createDefault();

        String result = "";

        try {

            String fileName = file.getOriginalFilename();

            HttpPost httpPost = new HttpPost(url);

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();

            builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流

            builder.addTextBody("type", "2");// 类似浏览器表单提交,对应input的name和value

            HttpEntity entity = builder.build();

            httpPost.setEntity(entity);

            HttpResponse response = httpClient.execute(httpPost);// 执行提交

            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {

                // 将响应内容转换为字符串

                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));

            }

        } catch (IOException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                httpClient.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        return result;

    }

}

 

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

package com.example.demo.config;

  

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.multipart.commons.CommonsMultipartResolver;

  

@Configuration

public class ConfigBean {

  

    @Bean

    public CommonsMultipartResolver multipartResolver(){

        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();

        multipartResolver.setDefaultEncoding("UTF-8");

        multipartResolver.setMaxUploadSize(104857600);

        multipartResolver.setMaxInMemorySize(40960);

        return multipartResolver;

    }

}

 

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

@RequestMapping(value = "/uploadFile/upload", method = RequestMethod.POST)

    @ResponseBody

    public String upload(@RequestParam(value = "file") MultipartFile file) {

        if (file.isEmpty()) {

            return "上传失败,请选择文件";

        }

        String filename = UUID.randomUUID().toString();

        String suffix = "";

        String originalFilename = file.getOriginalFilename();

        // 截取文件的后缀名

        if (originalFilename.contains(".")) {

            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        }

        String fileName = filename + suffix;

        String filePath = "D:\\A\\B\\D\\";

        File dest = new File(filePath + fileName);

        try {

            file.transferTo(dest);

            return "上传成功";

        } catch (IOException e) {

        }

        return "上传失败!";

    }

  

    @RequestMapping(value = "/uploadFile/uploadPermanent", method = RequestMethod.POST)

    @ResponseBody

    public String uploadPermanent(@RequestParam(value = "file") MultipartFile file) {

        String url = "http://192.168.1.56:9090";

        String ss= HttpClientUtil.httpClientUploadFile(url+"/uploadFile/upload",file);

        return ss;

    }


Spring boot 文件上传与文件转发_第2张图片
Spring boot 文件上传与文件转发_第3张图片
如图就说明文件上传已经好了 
Spring boot 文件上传与文件转发_第4张图片
Spring boot 文件上传与文件转发_第5张图片
这里环绕了两次,一次是到中转方法上的,一个是到目标方法上,当然这里是把中转服务器和目标服务器写到了一起,但是场景是满足中转条件的
当然还有非常多的方法来帮助我们办到这些

更多java学习资料可关注:itheimaGZ获取

你可能感兴趣的:(java)