
SpringCloud阿里云实现OSSaliyun-spring-boot/·alibaba/aliyun-spring-boot·GitHub在启动示例进行演示之前,我们先了解一下如何接入OSS。接......
aliyun-spring-boot/·alibaba/aliyun-spring-boot·GitHub
在启动示例进行演示之前,我们先了解一下如何接入OSS。
接入相关操作只需修改accessKey、secretKey、point即可。
修改文件,引入aliyun-oss-spring-boot-starter。
/groupIdartifactIdaliyun-oss-spring-boot-starter/artifactId/depency
SpringCloud整合的start为下面的
--应该为下面的--/groupIdartifactIdspring-cloud-starter-alicloud-oss//version/depency
在配置文件中配置OSS服务对应的accessKey、secretKey和point。
//===***
以阿里云accessKey、secretKey为例,获取方式如下。
i.在阿里云控制台界面,单击右上角头像,选择accesskeys,或者直接登录用户信息管理界面:获取相关key信息填入
使用SpringCloud阿里云封装好的OSSClient直接进行上传
测试用例@SpringBootTestpublicclassTestFor{@ResourceOSSClientossClient;@Testpublicvoidte()throwsFileNotFoundException{FileInputStreaminputStream=newFileInputStream("C:\\Users\\Pictures\\903");("gulimall-xuda","903",inputStream);();("上传完成");}}注意:如果您使用了阿里云STS服务进行短期访问权限管理,则除了accessKey、secretKey、point以外,还需配置securityToken。
注入OSSClient并进行文件下载操作。
@ServicepublicclassYourService{@AutowiredprivateOSSClientossClient;publicvoidsaveFile(){//(newGetObjectRequest(bucketName,objectName),newFile("pathOfYourLocalFile"));}}说明:直接注入OSSClient方式通常用于大量文件对象操作的场景。如果仅仅是需要读取文件对象内容,OSSStarter也支持以Resource方式读取文件,前后端整合进行阿里云OSS

上传流程阿里云对象存储-服务端签名后直传
通常我们是前端将图片数据上传到后端再通过后端上传到OSS的,但这样直接使用服务器进行交互会使我们的服务器压力很大,
因为上传到OSS需要带上key的账户和密码,所以我们可以向服务器上传我们的请求,服务器将OSSkey生成一个签名数据返回给前端,前端将图片与签名数据进行携带直接与阿里云OSS进行交互上传,这样可以更快更节省服务器压力可以参考下列文档阿里云OSS服务端签名直传地址在这里插入图片描述网关设置
使用到nacos作为服务注册,gateway网关作为服务分发
spring:cloud:nacos:discovery:server-addr:127.0.0.1:8848gateway:routes:-id:test_routeuri:**filters:-RewritePath=/api/thirdparty/(?segment.*),/$\{segment}application:name:gulimall-gatewayserver:port:89网关配置跨域请求权限;;;;;;/***@author:程序员徐大大*@description:统一配置跨域请求*@date:2022-07-1922:21*/@ConfigurationpublicclassCoresConfigur{@BeanpublicCorsWebFiltercorsWebFilter(){UrlBasedCorsConfigurationSourceurlBasedCorsConfigurationSource=newUrlBasedCorsConfigurationSource();CorsConfigurationcoresConfiguration=newCorsConfiguration();//配置跨域("*");("*");//("*");//("*");(true);("/**",coresConfiguration);returnnewCorsWebFilter(urlBasedCorsConfigurationSource);}}创建第三方OSS项目创建yml相关配置
spring:cloud:alicloud:access-key:your-keysecret-key:your-keyoss:point::discovery:server-addr:127.0.0.1:8848application:name:third-partyserver:port:8900
编写回调OSS签名密钥代码
;;;;;;;;;;;;;;;/***@author:程序员徐大大*@description:TODO*@date:2022-07-2121:35*/@RestControllerpublicclassOssController{@ResourceprivateOSSClientossClient;@Value("${}")privateStringpoint;@Value("${}")privateStringaccessId;@RequestMapping("/oss/policy")publicRpolicy(){//阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。//填写Bucket名称,例如examplebucket。Stringbucket="gulimall-xuda";//填写Host地址,格式为。Stringhost="https://"+bucket+"."+point;//设置上传回调URL,即回调服务器地址,用于处理应用服务器与OSS之间的通信。OSS会在文件上传完成后,把文件上传信息通过此回调URL发送给应用服务器。//StringcallbackUrl="";//设置上传到OSS文件的前缀,可置空此项。置空后,文件将上传至Bucket的根目录下。//将日期作为上传的文件夹目录Stringformat=newSimpleDateFormat("yyyy-MM-dd").format(newDate());Stringdir=format+"/";MapString,StringrespMap=null;try{longexpireTime=30;longexpireTime=()+expireTime*1000;Dateexpiration=newDate(expireTime);PolicyConditionspolicyConds=newPolicyConditions();(_CONTENT_LENGTH_RANGE,0,1048576000);(,_KEY,dir);StringpostPolicy=(expiration,policyConds);byte[]binaryData=("utf-8");StringencodedPolicy=(binaryData);StringpostSignature=(postPolicy);respMap=newLinkedHashMapString,String();("accessid",accessId);("policy",encodedPolicy);("signature",postSignature);("dir",dir);("host",host);("expire",(expireTime/1000));//("expire",formatISO8601Date(expiration));}catch(Exceptione){//(());(());}().put("data",respMap);//创建返回JSON数据封装}}JSON返回代码
;;;;/***返回数据**/publicclassRextsHashMapString,Object{privatestaticfinallongserialVersionUID=1L;publicR(){put("code",0);put("msg","success");}publicstaticRerror(){returnerror(_INTERNAL_SERVER_ERROR,"未知异常,请联系管理员");}publicstaticRerror(Stringmsg){returnerror(_INTERNAL_SERVER_ERROR,msg);}publicstaticRerror(intcode,Stringmsg){Rr=newR();("code",code);("msg",msg);returnr;}publicstaticRok(Stringmsg){Rr=newR();("msg",msg);returnr;}publicstaticRok(MapString,Objectmap){Rr=newR();(map);returnr;}publicstaticRok(){returnnewR();}publicRput(Stringkey,Objectvalue){(key,value);returnthis;}}前端VUE代码示例templateel-dialog:title="!?'新增':'修改'":close-on-click-modal="false":="visible"el-form:model="dataForm":rules="dataRule"ref="dataForm"@="dataFormSubmit()"label-width="140px"el-form-itemlabel="品牌名"prop="name"el-inputv-model=""placeholder="品牌名"/el-input/el-form-itemel-form-itemlabel="品牌logo地址"prop="logo"single-uploadv-model=""/single-upload/el-form-item/el-formspanslot="footer"class="dialog-footer"el-button@click="visible=false"取消/el-buttonel-buttontype="primary"@click="dataFormSubmit()"确定/el-button/span/el-dialog/templatescriptimportSingleUploadfrom"@/components/upload/singleUpload";exportdefault{components:{SingleUpload},data(){return{visible:false,dataForm:{brandId:0,name:"",logo:"",},dataRule:{name:[{required:true,message:"品牌名不能为空",trigger:"blur"}],logo:[{required:true,message:"品牌logo地址不能为空",trigger:"blur"},],},};},methods:{init(id){=id||0;=true;this.$nextTick(()={this.$refs["dataForm"].resetFields();if(){this.$http({url:this.$(`/product/brand/info/${}`),method:"get",params:this.$(),}).then(({data})={if(===0){=;=;}});}});},//表单提交dataFormSubmit(){this.$refs["dataForm"].validate((valid)={if(valid){this.$http({url:this.$(`/product/brand/${!?"save":"update"}`),method:"post",data:this.$({brandId:||undefined,name:,logo:,}),}).then(({data})={if(===0){this.$message({message:"操作成功",type:"success",duration:1500,onClose:()={=false;this.$emit("refreshDataList");},});}else{this.$();}});}});},},};/script