当前位置:首页 > 机械智慧 > 正文

SpringCloud阿里云实现OSS

SpringCloud阿里云实现OSSaliyun-spring-boot/·alibaba/aliyun-spring-boot·GitHub在启动示例进行演示之前,我们先了解一下如何接入OSS。接入相关操作只需修改accessKey、secretKey、point即可。修改文件,引入aliyun...

SpringCloud阿里云实现OSSaliyun-spring-boot/·alibaba/aliyun-spring-boot·GitHub在启动示例进行演示之前,我们先了解一下如何接入OSS。接......

SpringCloud阿里云实现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


最新文章