前言:

项目需求:做一个图片服务器,用于存放业务部门做的宣传图片;支持上传、下载和在线查看。

一、需求分解

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 搭建图片服务器 -- 支持上传下载和浏览相关推荐

  1. linux搭建ftp服务器可上传下载,通过linux系统搭建ftp服务然后使用filezilla客户端进行上传下载...

    1.         准备环境 一台linux主机作为ftp服务器(这里以centos7.2系统为例),一台Windows系统的主机作为客户端 2.         服务端配置: (1)   下载vs ...

  2. Linux服务器怎样上传下载文件

    SFTP 在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:S ...

  3. XManager5 ssh远程登录服务器工具xshell ,服务器资源上传下载工具xftp

    XManager5 网盘下载 链接:https://pan.baidu.com/s/1t1wL3xnsucoP6hDnP30INA 提取码:9cq3 安装后 打开 ssh 远程登录服务器工具 xshe ...

  4. Mac使用终端ssh对服务器文件上传下载(实用!)

    原博链接:https://blog.csdn.net/zcl_666/article/details/52240511#comments 在windows系统下有xshell可以很方便的登录服务器上传 ...

  5. nginx服务器实现上传下载文件

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 Nginx文件服务器 使 ...

  6. java jsch下载文件,JSch使用sftp协议实现服务器文件上传下载操作

    Jsch是什么? JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2 ...

  7. Linux上的天翼云盘客户端,支持上传下载

    最近把手头的电信卡办理的业务疏理了一遍,退订了不必要的业务,并且薅了免费的天翼云盘,发现这个真是神器,不仅送了10T的免费空间,而且下载能到十几M,上传是满速(我的宽带比较挫,上传只有7M),相对应国 ...

  8. [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹

    摘要 上篇文章介绍了如何为ftp添加虚拟用户,本篇将继续实践如何上传,下载文件. 上传 使用xftp客户端上传文件,如图所示 此时上传状态报错,查看详情 从错误看出是应为无法创建文件造成的.那么我们就 ...

  9. Maven入门:使用Nexus搭建Maven私服及上传下载jar包

    一. 私服搭建及配置 1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓 ...

最新文章

  1. JAVA设计模式之不变模式
  2. python PyQt5 adjustSize()(根据内容自适应大小)
  3. 对 Linux 新手非常有用的 20 个命令
  4. Linux/U-Boot Git Repo
  5. Linux中逻辑卷的快照与还原
  6. IDEA Java Web 推送Tomcat
  7. react.lazy 路由懒加载_React lazy/Suspense使用及源码解析
  8. C#组成考题字符串【C#】
  9. 【pytorch】torch.range() 和 torch.arange() ==>以step为间隔输出从start到end的张量列表
  10. 8.1、Spring Boot 属性配置
  11. C语言结构体(Struct)
  12. python读excel并写入_Python 写入和读取Excel数据
  13. Vscode中HTML与CSS代码的快速写法
  14. 朗途职业规划之一 职业发展报告 (北森测评)
  15. opendds简单入门(二)
  16. 读书笔记—《雷达信号处理基础》第一章 雷达系统与信号处理概述
  17. 20考研率辉计算机复试(散列)
  18. 如何使用AI绘制网格花卉?
  19. Day 5:自己编写的mysql类
  20. 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现

热门文章

  1. 微信编辑器哪个更好用?
  2. charCodeAt() 和charAt()
  3. 什么是单页面应用(SPA)和多页面应用(MPA)
  4. 股票买入卖出 LeetCode 变形题 度小满
  5. 基于AT89C51单片机的液位检测及显示电路设计
  6. NSArray的一些使用方法
  7. ElasticSearch安装配置(es)
  8. 亚马逊云科技构建Serverless数据分析战略
  9. 单边正弦信号拉斯变换 matlab
  10. linux下sqlite安装及基本使用