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;
     }



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


这里环绕了两次,一次是到中转方法上的,一个是到目标方法上,当然这里是把中转服务器和目标服务器写到了一起,但是场景是满足中转条件的
当然还有非常多的方法来帮助我们办到这些


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM