SpringBoot 搭建图片服务器 -- 支持上传下载和浏览
前言:
项目需求:做一个图片服务器,用于存放业务部门做的宣传图片;支持上传、下载和在线查看。
一、需求分解
1. 上传、下载功能比较成熟,相对好实现;
2. 在线预览,需要分为单个文件预览和多个文件预览;
二、接口设计
请求路径 | 描述 |
---|---|
POST /pic/upload | 上传接口,返回文件预览地址 |
GET /pic/download?fileName=文件 | 下载接口 |
GET /pic/list | 文件列表,返回文件预览地址数组 |
GET /pic/file/文件 | 单文件预览;资源查找设计,无相关接口设计 |
三、功能实现
工具列表:
jdk: 1.8.0_291
springboot: 2.3.2.RELEASE
IDEA: 2019.3.5
配置文件:
server:port: 8002servlet:context-path: /pic
spring:application:name: pic-serverjackson:default-property-inclusion: non_nulldate-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8pic:dir: F:/work/pic/
1. 文件预览
添加资源配置:
@Configuration
public class PicConfig implements WebMvcConfigurer {@Value("${pic.dir}")private String picDir;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/file/**").addResourceLocations("file:" + picDir);}
}
配置好以后可以启动工程查看图片资源:
本地目录下的资源如下:
PostMan 请求:
2. 文件上传、下载,文件列表
接口描述:
@Slf4j
@RestController
@RequestMapping()
public class PicController {@AutowiredFileService fileService;@PostMapping("/upload")public ResultBean upload(@RequestParam("media") MultipartFile file) {log.info("save file name {}", file.getOriginalFilename());String filePath = fileService.saveFile(file);return ResultBean.success(filePath);}@GetMapping("/download")public ResultBean downloadFile(HttpServletResponse response,@RequestParam(value = "fileName") String fileName) {Boolean result = fileService.downloadFile(response, fileName);return ResultBean.success(result);}@GetMapping("/list")public ResultBean list() {return ResultBean.success(fileService.getFiles());}}
注:ResultBean 结构体可参考如果优美地设计 springboot 接口返回_清泉影月-CSDN博客
核心服务:
@Slf4j
@Service
public class FileService {@Value("${server.port}")private String port;@Value("${server.servlet.context-path}")private String contextPath;@Value("${pic.dir}")private String picDir;public String saveFile(MultipartFile multipartFile) {String filename = multipartFile.getOriginalFilename();File file = new File(picDir + filename);try {multipartFile.transferTo(file);} catch (IOException e) {log.error("save file error,{}", e.getMessage());return "";}return getFileUrl(filename);}public List<String> getFiles() {List<String> fileUrls = new ArrayList<>();File file = new File(picDir);if (file.isDirectory()) {File[] files = file.listFiles();if (files != null) {for (File file1 : files) {fileUrls.add(getFileUrl(file1.getName()));}}}return fileUrls;}private String getFileUrl(String fileName) {try {InetAddress address = InetAddress.getLocalHost();String fileUrl = "http://" + address.getHostAddress() + ":" + port + contextPath + "/file/" + fileName;log.info("fileUrl:{}", fileUrl);return fileUrl;} catch (UnknownHostException e) {log.error("get host error,{}", e.getMessage());return "";}}public Boolean downloadFile(HttpServletResponse response, String fileName) {File file = new File(picDir + fileName);if (file.exists()) {try {FileInputStream fileInputStream = new FileInputStream(file);response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));ServletOutputStream outputStream = response.getOutputStream();FileCopyUtils.copy(fileInputStream, outputStream);return true;} catch (IOException e) {log.error("download file error: {}", e.getMessage());return false;}}return false;}}
PostMan 测试上传和下载:
上传:
下载(浏览器打开链接会直接下载文件):
四、 结语
1. 上述是一个开放的存储系统,没有设计权限;
2. 可以用于存储其它文件,文件预览不保证效果;
3. 以上引用了某网红的图片,如果涉及侵权,可联系删除。
SpringBoot 搭建图片服务器 -- 支持上传下载和浏览相关推荐
- linux搭建ftp服务器可上传下载,通过linux系统搭建ftp服务然后使用filezilla客户端进行上传下载...
1. 准备环境 一台linux主机作为ftp服务器(这里以centos7.2系统为例),一台Windows系统的主机作为客户端 2. 服务端配置: (1) 下载vs ...
- Linux服务器怎样上传下载文件
SFTP 在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:S ...
- XManager5 ssh远程登录服务器工具xshell ,服务器资源上传下载工具xftp
XManager5 网盘下载 链接:https://pan.baidu.com/s/1t1wL3xnsucoP6hDnP30INA 提取码:9cq3 安装后 打开 ssh 远程登录服务器工具 xshe ...
- Mac使用终端ssh对服务器文件上传下载(实用!)
原博链接:https://blog.csdn.net/zcl_666/article/details/52240511#comments 在windows系统下有xshell可以很方便的登录服务器上传 ...
- nginx服务器实现上传下载文件
作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 Nginx文件服务器 使 ...
- java jsch下载文件,JSch使用sftp协议实现服务器文件上传下载操作
Jsch是什么? JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2 ...
- Linux上的天翼云盘客户端,支持上传下载
最近把手头的电信卡办理的业务疏理了一遍,退订了不必要的业务,并且薅了免费的天翼云盘,发现这个真是神器,不仅送了10T的免费空间,而且下载能到十几M,上传是满速(我的宽带比较挫,上传只有7M),相对应国 ...
- [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
摘要 上篇文章介绍了如何为ftp添加虚拟用户,本篇将继续实践如何上传,下载文件. 上传 使用xftp客户端上传文件,如图所示 此时上传状态报错,查看详情 从错误看出是应为无法创建文件造成的.那么我们就 ...
- Maven入门:使用Nexus搭建Maven私服及上传下载jar包
一. 私服搭建及配置 1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓 ...
最新文章
- JAVA设计模式之不变模式
- python PyQt5 adjustSize()(根据内容自适应大小)
- 对 Linux 新手非常有用的 20 个命令
- Linux/U-Boot Git Repo
- Linux中逻辑卷的快照与还原
- IDEA Java Web 推送Tomcat
- react.lazy 路由懒加载_React lazy/Suspense使用及源码解析
- C#组成考题字符串【C#】
- 【pytorch】torch.range() 和 torch.arange() ==>以step为间隔输出从start到end的张量列表
- 8.1、Spring Boot 属性配置
- C语言结构体(Struct)
- python读excel并写入_Python 写入和读取Excel数据
- Vscode中HTML与CSS代码的快速写法
- 朗途职业规划之一 职业发展报告 (北森测评)
- opendds简单入门(二)
- 读书笔记—《雷达信号处理基础》第一章 雷达系统与信号处理概述
- 20考研率辉计算机复试(散列)
- 如何使用AI绘制网格花卉?
- Day 5:自己编写的mysql类
- 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现