Spring boot 文件上传与文件转发

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

新引入的包
[XML] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.10</version>
        </dependency>
  
        <!-- [url]https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient[/url] -->
  
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </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;
    }



如图就说明文件上传已经好了 


这里环绕了两次,一次是到中转方法上的,一个是到目标方法上,当然这里是把中转服务器和目标服务器写到了一起,但是场景是满足中转条件的
当然还有非常多的方法来帮助我们办到这些
posted @ 2020-03-12 10:45  幽暗森林之猪大屁  阅读(1522)  评论(0)    收藏  举报