3.从零开始搭建基于SpringCloud的京东整站_文件上传微服务
本次目标
本次实现的目标:实现图片上传微服务。
文件上传在很多项目和很多模块都要用到,所以将其单独作为一个微服务。
如下图蓝色箭头所示: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的京东整站_文件上传微服务相关推荐
- 4.从零开始搭建基于SpringCloud的京东整站_用户微服务_后台登录鉴权
本次目标 实现后台登录鉴权功能. 接口文档 1.后台管理员登录 页面访问地址:http://admin/pages/main/login.html 2.接口描述 js请求地址 http://{ip:p ...
- layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...
写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...
- 基于Springboot外卖系统13:实现文件上传下载模块
1. 上传功能模块 1.1 上传概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 文件上传时,对页面的form表单有如下要求: 表单 ...
- c语言http上传图片,基于RTOS的c语言实现http文件上传
本实验为了减少代码量,使用了封装比较完善的http库,本文主要讲述http文件上传的主要要求. 一.分析http关键头部信息 为了分析http header,我们通过chrome得到上传文件时的htt ...
- springcloud feign前后端分离实现文件上传下载
文件上传 一.服务消费者Controller package com.biddingportal.controller;import com.alibaba.fastjson.JSON; import ...
- 基于tornado服务器的文件上传和下载
文章目录 文件上传的服务端技术解析 基于Ajax技术实现的文件上传客户端 方法1:使用 ajaxfileupload.js 方法2:仅依赖 jquery.js 文件下载的服务端技术解析 文件上传的服务 ...
- 如何基于OSS和MPS,快速搭建音视频文件上传服务?
背景 本文主要介绍如何基于OSS服务和MPS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MPS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS Token ...
- 如何基于OSS和MTS,快速搭建音视频文件上传服务?
摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS To ...
- 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2021版)
FODI是一款 OneDrive 秒级列表程序,之前就支持腾讯云SFC搭建基于onedrive的网盘站,但是现在腾讯云api要收费了(cloudflare的访问速度没有腾讯云的SFC快),所以其作者增 ...
最新文章
- 18岁双料竞赛金牌得主邓明扬:我只是数学初学者,求在MIT“活”下去
- 解决归档出错,ORA-00257: archiver error. Connect internal only, until freed.
- 2016年6月份学习总结,读书《向着光亮那方》
- 服务器做文件共享服务特点,服务器主机做共享文件
- 日照油库系统推荐_数据中心很重要,消防防范更重要——七氟丙烷气体灭火系统...
- Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号
- 【算法】斐波那契数列
- 计算机系统制造时间成本,如何构建计算机成本核算系统.doc
- python函数的使用
- clover删除多余引导_[转载]EFI引导如何去掉多余的这个clover启动项
- 异或(另类斐波那契数列题)
- Win10桌面极简美化
- 华为研发模式演进历程
- android 华为打开usb调试模式,华为H60-L01 开启USB调试模式
- 【自学Python:Day3】放假的心该怎么冷静下来学……
- 市场供需简单模型分析
- Failed to start LSB: Kurento Media Server daemon. kurento-media-server 启动失败的解决办法
- Android跳转qq进行聊天
- 磨金石教育学剪辑是正规的教育机构吗?小白学剪辑怎么样?有什么学习方法?
- 华为机试真题 C++ 实现【处理器问题】【2022.11 Q4 新题】
热门文章
- SaaS、PaaS、IaaS
- Microsoft OLE DB Provider for SQL Server 错误 '80040e37'
- 《Java编程思想》读后总结(一)
- Dijkstra算法实例
- 【忏悔的博客】2020普及组三校联考(西附)
- 容和率计算机方法,储能电路中电容器容量和功率计算方法.doc
- 在Outlook 2010中查看您的Google日历
- 华翔天诚晨控科技面向推出的一款“跨界”传感器,广泛应用AGⅤ行业
- Windows 安装 cygwin 详细步骤
- 使用 PyTesseract 和 OpenCV 从表格图像中提取文本