本次目标

本次实现的目标:实现图片上传微服务
文件上传在很多项目和很多模块都要用到,所以将其单独作为一个微服务。
如下图蓝色箭头所示:FileUploadMicroservice

静态资源

本案例图片上传使用的是bootstrap-fileinput,文档地址:http://www.bootstrap-fileinput.com/

bootstrap-fileinput 简介

bootstrap-fileinput是一款非常优秀的HTML5文件上传插件,支持bootstrap 3.x 和4.x版本,具有非常多的特性:多文件选择。这个插件能最简单的帮你完成文件上传功能,且使用bootstrap样式。还支持多种文件的预览,images, text, html, video, audio, flash。另外还支持ajax方式上传文件,可以看到上传进度。支持拖拽的方式添加和删除文件。

文件上传地址:注意下方uploadUrl的值:

<script>$("#file-1").fileinput({uploadUrl: 'http://localhost/file/doFileUp',allowedFileExtensions : ['jpg', 'png','gif'],overwriteInitial: false,maxFileSize: 7000,maxFilesNum: 10,//allowedFileTypes: ['image', 'video', 'flash'],slugCallback: function(filename) {return filename.replace('(', '_').replace(']', '_');}}).on("filebatchselected", function (event, data) {//选择即上传if (data.length == 0) {return;}}).on('fileuploaded', function (event, data) {//异步上传成功结果处理alert(data.response.url)console.log(event, data);}).on('fileerror', function (event, data, msg) {//异步上传失败结果处理console.log(event, data, msg);}).on('fileuploaderror', function (event, data, msg) {//异步上传失败结果处理console.log(event, data, msg);}).on('filebatchuploadsuccess', function(event,data,previewId,index) {//同步上传回调console.log(event, data);});</script>

nginx映射配置

location ^~/fileup {alias   D:/AllCodes/bigdata/JD_ALL/src/test/resources/bootstrap_fileupload;index  index.html index.htm;
}

后台微服务开发

application.properties

#文件上传根路径
fileRootDir=d:/test/testUploads
#最终路径前缀
fileUrlPre=http://image.jd.com/
server.port=10001
spring.application.name=fileUploadService
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka

控制层

@RestController
public class FileUpController {@AutowiredPicUploadService picUploadService;@RequestMapping("file/doFileUp")public PicUploadResult doFileUp(@RequestParam("file_data") MultipartFile pic){return  picUploadService.doFileUp(pic);}@RequestMapping("file/test")public String test(){return "haha";}
}

Service层

接口:PicUploadService.java

public interface PicUploadService {PicUploadResult doFileUp(MultipartFile mf);
}

实现:FileUploadServiceImpl.java

package liwen.zhao.service;import liwen.zhao.common.jd.utils.UploadUtil;
import liwen.zhao.common.jd.vo.PicUploadResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.util.UUID;@Service
public class FileUploadServiceImpl implements  PicUploadService{@Value("${fileRootDir}")private String fileRootDir;@Value("${fileUrlPre}")private String fileUrlPre;@Overridepublic PicUploadResult doFileUp(MultipartFile pic) {/*1.验证图片合法,通过后缀名 .png .jpg .gif等的后缀是合法2.生成一个多级路径/upload/a/c/3/d/3/f/4/h/磁盘路径使用url地址3.重命名图片名称,存储到静态文件夹下的路径中${fileRootDir}/upload/a/c/3/d/3/f/4/h/asdljflasj-asdlkfjsad-sdakf.jpg4.对应存储的地址,生成一个可访问的urlhttp://image.jt.com/upload/a/c/3/d/3/f/4/h/asdljflasj-asdlkfjsad-sdakf.jpg*///准备一个业务逻辑执行过程,和结束时返回的对象PicUploadResult result=new PicUploadResult();//拿到图片原文件名称String oName = pic.getOriginalFilename();//moon.jpg 从字符串截取最后一个.到结尾sadljfsl-0231lkdslf23.extString extName = oName.substring(oName.lastIndexOf("."));//正则表达式判断后缀是否合法boolean matches = extName.matches(".(png|jpg|gif|bmp|jpeg)$");//关心不合法,生成对象,设置error=1 返回对象,后续逻辑不执行了if(!matches){//说明后缀不合法result.setSuccess(1);return result;}//生成一个多级路径 /jd/4/f/e/5/t/g/f/g/String dir="/"+ UploadUtil.getUploadPath(oName,"jd")+"/";//创建磁盘的文件夹String path=fileRootDir+dir;//${fileRootDir}/4/f/e/5/t/g/f/g/File _dir=new File(path);//判断文件夹是否存在,不存在则创建if(!_dir.exists()){//说明文件夹不存在_dir.mkdirs();}//将pic的二进制数据做成一个文件输出到这个目录//重命名图片名称try{String nName= UUID.randomUUID().toString()+extName;String file=path+nName;//${fileRootDir}/4/f/e/5/t/g/f/g/asldjf-alfjs-asdlfjs.jpgpic.transferTo(new File(file));//可以直接将pic对象的文件输出到一个磁盘文件中//拼接urlString url=fileUrlPre+dir+nName;result.setUrl(url);return result;}catch(Exception e){e.printStackTrace();result.setSuccess(1);return result;}}
}

启动代码

package liwen.zhao;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class FileUploadMicroserviceStarter {public static void main(String[] args) {SpringApplication.run(FileUploadMicroserviceStarter.class,args);}
}

最终效果


上传:

验证:

代码地址:https://gitee.com/zhaoliwen/JD_ALL.git

3.从零开始搭建基于SpringCloud的京东整站_文件上传微服务相关推荐

  1. 4.从零开始搭建基于SpringCloud的京东整站_用户微服务_后台登录鉴权

    本次目标 实现后台登录鉴权功能. 接口文档 1.后台管理员登录 页面访问地址:http://admin/pages/main/login.html 2.接口描述 js请求地址 http://{ip:p ...

  2. layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...

    写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...

  3. 基于Springboot外卖系统13:实现文件上传下载模块

    1. 上传功能模块 1.1 上传概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 文件上传时,对页面的form表单有如下要求: 表单 ...

  4. c语言http上传图片,基于RTOS的c语言实现http文件上传

    本实验为了减少代码量,使用了封装比较完善的http库,本文主要讲述http文件上传的主要要求. 一.分析http关键头部信息 为了分析http header,我们通过chrome得到上传文件时的htt ...

  5. springcloud feign前后端分离实现文件上传下载

    文件上传 一.服务消费者Controller package com.biddingportal.controller;import com.alibaba.fastjson.JSON; import ...

  6. 基于tornado服务器的文件上传和下载

    文章目录 文件上传的服务端技术解析 基于Ajax技术实现的文件上传客户端 方法1:使用 ajaxfileupload.js 方法2:仅依赖 jquery.js 文件下载的服务端技术解析 文件上传的服务 ...

  7. 如何基于OSS和MPS,快速搭建音视频文件上传服务?

    背景 本文主要介绍如何基于OSS服务和MPS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MPS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS Token ...

  8. 如何基于OSS和MTS,快速搭建音视频文件上传服务?

    摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS To ...

  9. 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2021版)

    FODI是一款 OneDrive 秒级列表程序,之前就支持腾讯云SFC搭建基于onedrive的网盘站,但是现在腾讯云api要收费了(cloudflare的访问速度没有腾讯云的SFC快),所以其作者增 ...

最新文章

  1. 18岁双料竞赛金牌得主邓明扬:我只是数学初学者,求在MIT“活”下去
  2. 解决归档出错,ORA-00257: archiver error. Connect internal only, until freed.
  3. 2016年6月份学习总结,读书《向着光亮那方》
  4. 服务器做文件共享服务特点,服务器主机做共享文件
  5. 日照油库系统推荐_数据中心很重要,消防防范更重要——七氟丙烷气体灭火系统...
  6. Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号
  7. 【算法】斐波那契数列
  8. 计算机系统制造时间成本,如何构建计算机成本核算系统.doc
  9. python函数的使用
  10. clover删除多余引导_[转载]EFI引导如何去掉多余的这个clover启动项
  11. 异或(另类斐波那契数列题)
  12. Win10桌面极简美化
  13. 华为研发模式演进历程
  14. android 华为打开usb调试模式,华为H60-L01 开启USB调试模式
  15. 【自学Python:Day3】放假的心该怎么冷静下来学……
  16. 市场供需简单模型分析
  17. Failed to start LSB: Kurento Media Server daemon. kurento-media-server 启动失败的解决办法
  18. Android跳转qq进行聊天
  19. 磨金石教育学剪辑是正规的教育机构吗?小白学剪辑怎么样?有什么学习方法?
  20. 华为机试真题 C++ 实现【处理器问题】【2022.11 Q4 新题】

热门文章

  1. SaaS、PaaS、IaaS
  2. Microsoft OLE DB Provider for SQL Server 错误 '80040e37'
  3. 《Java编程思想》读后总结(一)
  4. Dijkstra算法实例
  5. 【忏悔的博客】2020普及组三校联考(西附)
  6. 容和率计算机方法,储能电路中电容器容量和功率计算方法.doc
  7. 在Outlook 2010中查看您的Google日历
  8. 华翔天诚晨控科技面向推出的一款“跨界”传感器,广泛应用AGⅤ行业
  9. Windows 安装 cygwin 详细步骤
  10. 使用 PyTesseract 和 OpenCV 从表格图像中提取文本