SpringBoot上传文件到服务器(跨服务器上传)
创始人
2025-01-21 05:32:43
0

目录

(一)上传文件到本地(windows)

(二)上传文件到linux服务器

(三)跨服务器上传文件


(一)上传文件到本地(windows)

1.新建一个文件夹来存储上传的文件

在application.yml中写上传的文件夹地址

我这里上传到F盘下的一个文件夹

2.新建controller写接口

@RestController public class UploadController {          //获取yml中的文件上传地址     @Value("${windows.path}")     private String filePath;      @PostMapping("/uploadFile")     public Map uploadFile(@RequestParam("file") MultipartFile file){         //返回map集合         Map map = new HashMap();         //判断文件名是否为空         if (file.getOriginalFilename() == null){             map.put("code",500);             map.put("message","文件名为空!");             return map;         }         try {             //获取File文件             File file1 = new File(filePath, file.getOriginalFilename());             file.transferTo(file1);         }catch (Exception e){             map.put("code",500);             map.put("message","文件服务器上传失败!");             return map;         }         map.put("code",200);         map.put("message","文件服务器上传成功!");         return map;     } }

  java.io.File类是文件和目录路径名称的抽象表示,主要用于文件和目录的创建、查找和删除等操作

我们新建一个File对象,使用里面的

 public File(String parent,String child):从父路径字符串 和 子路径字符串创建新的File实例

这个对象会将父路径字符串与子路径字符串进行连接并转换为路径

然后调用file中的transferto() 方法即可完成上传

transferto() 方法的作用是将上传的文件保存到指定的目标位置

3.测试

发起请求

查看文件夹

上传本地成功!

(二)上传文件到linux服务器

这个其实也是上传到本地,因为我们的项目最终要放在linux服务器上运行,在服务器上运行,服务器其实就相当于项目的本地环境

还是刚才的项目

@RestController public class UploadController {      @Value("${file.path}")     private String filePath;      @PostMapping("/uploadFile")     public Map uploadFile(@RequestParam("file") MultipartFile file){         Map map = new HashMap();         if (file.getOriginalFilename() == null){             map.put("code",500);             map.put("message","文件名为空!");             return map;         }         try {             File file1 = new File(filePath, file.getOriginalFilename());             //如果目标文件夹不存在就创建             if (!file1.exists()){                 file1.createNewFile();             }             file.transferTo(file1);         }catch (Exception e){             map.put("code",500);             map.put("message","文件服务器上传失败!");             return map;         }         map.put("code",200);         map.put("message","文件服务器上传成功!");         return map;     } }

将项目打包部署到服务器上

在pom文件中添加

                   org.springframework.boot         spring-boot-maven-plugin         2.6.7                                                            repackage                                                          org.apache.maven.plugins         maven-surefire-plugin                      true                        

打包后在项目的target文件夹下找到jar包

上传到服务器运行

运行成功后访问接口        服务器地址+端口+地址(本机访问必须开放服务器上的项目端口)

查看文件夹

上传成功!!!

(三)跨服务器上传文件

前面两个demo都是本地上传

这个是访问本地的项目去上传到远程服务器上,例如我有一个专门存储文件的服务器,我所有的项目都需要将文件存储到文件服务器上。当我们有多个服务器的时候就可以这样将所有服务的文件上传到我们规定的文件服务器中

例如:访问本地的项目(localhost)将文件上传到linux服务器上

将上个demo继续在服务器上运行,然后我们本地的服务去调用刚才那个部署在服务器上的项目的上传文件的接口

思路:访问一个服务器上的上传文件的接口,然后这个接口的方法再调用post请求去访问文件服务器上的上传文件的接口就行

继续新建一个demo项目

依赖:

             org.springframework.boot             spring-boot-starter-web                                org.apache.httpcomponents             httpclient                                org.apache.httpcomponents             httpmime                                com.alibaba             fastjson             2.0.21         
server:   port: 8080  upload:   path: http://你的文件服务器地址:9080/uploadFile
@RestController public class UploadFileController {      @Value("${upload.path}")     private String uploadPath;      @PostMapping("/upload")     public String upload(@RequestParam("file") MultipartFile file) throws IOException {         //文件为空         if (file.isEmpty()){             return "文件异常";         }          CloseableHttpClient client = HttpClients.createDefault();          HttpPost httpPost = new HttpPost(uploadPath);          HttpEntity httpEntity = MultipartEntityBuilder.create()                 .addBinaryBody("file", file.getBytes(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename())                 .build();         httpPost.setEntity(httpEntity);          HttpResponse response = client.execute(httpPost);          int statusCode = response.getStatusLine().getStatusCode();         System.out.println(statusCode);         return file.getOriginalFilename();     } }

调用http请求去访问文件服务器上的上传文件的接口

测试:

我们访问本地项目的上传文件接口

查看linux服务器的文件夹查看是否有这个文件

上传成功!!!

问题:

在上传后的时候出现了中文乱码的问题,汉字变成了?

加个

HttpEntity httpEntity = MultipartEntityBuilder.create()         .setMode(HttpMultipartMode.RFC6532)         .addBinaryBody("file", multipartFile.getBytes(), ContentType.DEFAULT_BINARY, multipartFile.getOriginalFilename())         .build();

setMode即可

相关内容

热门资讯

推出新举措!0759湛江吴川三... 推出新举措!0759湛江吴川三脚鸡辅助(辅助挂)原来确实有挂(发现开挂辅助下载)-哔哩哔哩1、该软件...
值得注意的是!UU Games... 值得注意的是!UU Games辅助器(辅助挂)其实真的是有挂(传授开挂辅助神器)-哔哩哔哩1、实时U...
经核实!蘑菇云辅助使用视频(辅... 经核实!蘑菇云辅助使用视频(辅助挂)一直是有挂的(带你开挂辅助安装)-哔哩哔哩1、打开软件启动之后找...
受玩家影响!手机游戏辅助器(辅... 受玩家影响!手机游戏辅助器(辅助挂)一贯真的是有挂(实测开挂辅助插件)-哔哩哔哩1、用户打开应用后不...
事发当天!三哥玩辅助(辅助挂)... 事发当天!三哥玩辅助(辅助挂)果然真的是有挂(正品开挂辅助平台)-哔哩哔哩1、全新机制【三哥玩辅助软...
连日来!皇豪辅助(辅助挂)一直... 连日来!皇豪辅助(辅助挂)一直是有挂的(正版开挂辅助安装)-哔哩哔哩1、皇豪辅助透视辅助简单,皇豪辅...
受玩家影响!小逸碰胡脚本(辅助... 受玩家影响!小逸碰胡脚本(辅助挂)果然是有挂(教会开挂辅助工具)-哔哩哔哩亲,关键说明,小逸碰胡脚本...
据权威媒体报道!拼三张辅助器(... 据权威媒体报道!拼三张辅助器(辅助挂)原来真的是有挂(科技开挂辅助下载)-哔哩哔哩1、该软件可以轻松...
据了解!蜜瓜大厅可以装挂吗(辅... 据了解!蜜瓜大厅可以装挂吗(辅助挂)一贯真的是有挂(详细开挂辅助神器)-哔哩哔哩1、让任何用户在无需...
为切实保障!微乐广西小程序脚本... 为切实保障!微乐广西小程序脚本(辅助挂)一直是有挂(详细开挂辅助插件)-哔哩哔哩为切实保障!微乐广西...