SpringBoot上传文件到服务器(跨服务器上传)

目录

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

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

(三)跨服务器上传文件


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

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

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

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

2.新建controller写接口

@RestController
public class UploadController {//获取yml中的文件上传地址@Value("${windows.path}")private String filePath;@PostMapping("/uploadFile")public Map<String, Object> uploadFile(@RequestParam("file") MultipartFile file){//返回map集合Map<String, Object> map = new HashMap<String, Object>();//判断文件名是否为空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<String, Object> uploadFile(@RequestParam("file") MultipartFile file){Map<String, Object> map = new HashMap<String, Object>();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文件中添加

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.7</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin>
</plugins></build>

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

上传到服务器运行

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

查看文件夹

上传成功!!!

(三)跨服务器上传文件

前面两个demo都是本地上传

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

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

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

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

继续新建一个demo项目

依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.21</version></dependency>
server:port: 8080upload: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服务器的文件夹查看是否有这个文件

上传成功!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 AB路线

//bfs 1000100010不会超时 #include<bits/stdc.h> using namespace std; #define int long long const int n1e311; int a,b,c,h[n][n][12],k[4][2]{0,1,0,-1,1,0,-1,0}; char t[n][n]; struct s {int x,y,z,w; }; signed main() {ios::sync_with_stdio(false);cin.t…

(规格参考)ADP5360ACBZ-1-R7 电量计 电池管理IC,ADP5072ACBZ 双通道直流开关稳压器,ADL5903ACPZN 射频检测器

1、ADP5360ACBZ-1-R7&#xff1a;具有超低功耗电量计、电池保护功能的先进电池管理PMIC 功能&#xff1a;电池保护 电池化学成份&#xff1a;锂离子/聚合物 电池数&#xff1a;1 故障保护&#xff1a;超温&#xff0c;过压 接口&#xff1a;I2C 工作温度&#xff1a;-40C ~ 85…

Spring Security入门教程:实现自定义用户配置

在上一篇文章中&#xff1a;Spring Security入门教程&#xff1a;利用Spring Security实现安全控制 我们学会了使用Spring Security实现安全控制&#xff0c;学会了他的基础使用&#xff0c;这节课我们来学习一下它的自定义的功能&#xff0c;更深入的了解和使用Spring Securit…

OpenHarmony 实战开发——ArkUI canvas组件

canvas 是 ArkUI 开发框架里的画布组件&#xff0c;常用于自定义绘制图形。因为其轻量、灵活、高效等优点&#xff0c;被广泛应用于 UI 界面开发中。本期&#xff0c;我们将为大家介绍 ArkUI 开发框架中 canvas 组件的使用。 一、canvas 介绍 1.1 什么是 canvas&#xff1f; …

rocketmq的存储和检索

messageId是rocketmq自动生成的。

Java的response返回Json格式

问题 今天开发过程中&#xff0c;写了个拦截器&#xff0c;对于所以请求进行一个token的工作&#xff0c;对于不合标准的token返回错误&#xff0c;在网上找了个拦截器进行二次开发。 package com.maizhiyu.yzt.handle;import org.springframework.beans.factory.annotation.…

AWS Lambda配置CloudWatch日志

Hello example&#xff1a;AWS Lambda 第一个例子Hello (JAVA)-CSDN博客 创建lambda函数&#xff0c;测试&#xff0c;然后点击CloudWatch日志 CloudWatch日志组不存在 创建CloudWatch日志组 1) CloudWatch -> 日志组 -> 创建日志组 2) 填写名称&#xff0c;创建 添加权…

掌握这些神器,让你的编程之路更加“丝滑”

前言&#xff1a; 在软件开发的旅程中&#xff0c;程序员的实用神器确实如同指南针&#xff0c;帮助他们在复杂的代码海洋中导航。以下是从三个方向——自动化测试工具、持续集成/持续部署&#xff08;CI/CD&#xff09;以及代码审查与质量分析——来探讨这些实用神器的应用和影…

Prettier与ESLint:代码风格与质量的自动化保证

Prettier 和 ESLint 是两个互补的工具&#xff0c;它们共同确保代码的风格一致性和质量。Prettier 负责格式化代码&#xff0c;而 ESLint 则执行更复杂的静态分析和规则检查。 2500G计算机入门到高级架构师开发资料超级大礼包免费送&#xff01; Prettier 作用&#xff1a; …

python数据清洗-找到重复的txt并输出字数最少的

import os import json from collections import Counterdef find_and_write_duplicate_txt_files(root_folder, output_file):# 存储所有找到的 txt 文件名和路径的字典列表txt_files_dict_list []# 统计每个文件名出现的次数filename_counts Counter()# 遍历文件夹及其子文…

nmap端口扫描工具——LInux

目录 系统版本: nmap主要功能 安装: nmap命令使用方法

SC8908电机驱动芯片替代AN41908

SC8908 描述 五路H桥静音驱动电机驱动芯片&#xff0c;闭环直流电机光圈调节&#xff0c;支持霍尔位置检测&#xff0c; 2个步进电机。步进电机驱动带256微步细分。 主要特性 • 步进驱动H桥每路250mA最大驱动电流 • 光圈直流驱动H桥每路150mA最大驱动电流 • 单独…

web学习笔记(五十四)Vue

目录 1.初始Vue 1.1 什么是Vue 1.2 Vue的特点 1.3 引入Vue 1.4 使用Vue 2. 数据绑定的方法 2.1 Mustache&#xff08;双大括号插值法&#xff09; 2.2 v-text 2.3 v-html 3. 列表渲染 1.初始Vue 1.1 什么是Vue Vue 是一套用于构建用户界面的渐进式JavaScript框架。…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

libssh C++封装之六(Dir)

1 概述 libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。 libssh下载地址 3 实现 3.5 Dir Dir类型管理远程路径,通过SFTP和Channel实现(有…

uni u-form-item 只有图标点击有效

如下,输入的地方是个选择项,代码如下: <u-form-item class=u-form-item label="监督主题" prop="themeName" borderBottom ref="item1" @click="openPopup(0)" > <u--input v-model="form.themeNam…

PTA--《面线对象程序设计》作业3-继承与多态

目录 一&#xff1a;函数题 6-2 长方形长方体类&#xff1a; 6-1 从抽象类shape类扩展出一个圆形类Circle 二&#xff1a;编程题 7-1&#xff1a;周长计算器 一&#xff1a;函数题 6-2 长方形长方体类&#xff1a; 定义一个长方形类Rectangle&#xff0c;拥有长、宽属性…

定时发圈操作介绍

1、登陆已有的账号&#xff0c;点击到"朋友圈"功能 2、选择要发圈的微信号&#xff0c;编辑发圈的文案内容 3、自定义想要的时间点 4、点击"立即发送" 5、可进行跟圈

【JavaScript】eval

JavaScript 中的 eval() 是一个全局函数&#xff0c;它接受一个字符串参数&#xff0c;并将其作为 JavaScript 代码进行解析和执行&#xff1b;如果接收的不是一个字符串&#xff0c;则会将传入的数据直接返回。 eval 的基本用法&#xff1a; eval() 函数将传入的字符串参数作为…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码&#xff1a;解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念&#xff1a;切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…