如何在春季启动项目中实现一个文件上传功能

  介绍

如何在春季启动项目中实现一个文件上传功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


1。导入SDK

首先,你需要注册阿里云的账号并开通对象存储服务。在准备工作完成之后,需要导入JAVA版本的SDK,这里使用maven进行导入

& lt; !——阿里云OSS对象存储——比;   & lt; dependency>   & lt; groupId> com.aliyun.oss   & lt; artifactId> aliyun-sdk-oss   & lt; version> 3.8.0   & lt;/dependency>

2。修改配置文件

导入完成后在<代码>应用程序。属性>

 #节点域名
  aliyun.oss.endpoint=oss-cn-xxxxxxx.aliyuncs.com
  #账户id
  aliyun.oss.accessKeyId=xxxxxxxxxxxxx
  #账户密码
  aliyun.oss.accessKeySecret=xxxxxxxxxxxxx
  #桶名称
  aliyun.oss.bucketName=xxxxxxxxxxx
  #签名过期时间
  aliyun.oss.policy.expire=300
  #上传文件的最大尺寸
  aliyun.oss.maxSize=10
  #上传地址的前缀
  aliyun.oss.dir.prefix=xxx
  #回调参数的请求地址
  aliyun.oss.callback=http://www.xxxxxx.com/api/aliyun/oss/callback 

以上内容在开通服务后均可获取到,请根据实际情况进行修改

3。初始化

OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源。使用Java SDK发起OSS请求,您需要初始化一个OSSClient实例,并根据需要修改ClientConfiguration的默认配置项。

根据官方文档的描述,需要初始化一个<代码> OSSClient 实例并将其注入到春容器中,因此可以编写一个配置类<代码> OssConfig

@ configuration   @PropertySource(值=https://www.yisu.com/zixun/{“类路径:application.properties”},编码=皍tf - 8”)   公开课OssConfig {      @ value (" $ {aliyun.oss.endpoint} ")   私人弦端点;      @ value (" $ {aliyun.oss.accessKeyId} ")   私人字符串accessKeyId;      @ value (" $ {aliyun.oss.accessKeySecret} ")   私人字符串secretAccessKey;      @ bean   公共OSS ossClient () {   返回新OSSClientBuilder ()。构建(端点,accessKeyId secretAccessKey);   }   }

更多详细的配置,请参考官方文档:初始化

二、文件上传

1。流程分析

我们以典型的表单上传为例,在使用对象存储OSS后,表单上传分为以下几个流程:

如何在春季启动项目中实现一个文件上传功能

注:政策表单域用于验证请求的合法性,例如可以指定上传的大小,可以指定上传的对象名称等,上传成功后客户端跳转到的URL,上传成功后客户端收到的状态码。

 PolicyConditions policyConds=new PolicyConditions ();
  policyConds.addConditionItem (PolicyConditions。COND_CONTENT_LENGTH_RANGE 0最大尺寸);
  policyConds.addConditionItem (MatchMode。StartWith PolicyConditions。COND_KEY DIR_PREFIX);
  字符串postPolicy=ossClient。generatePostPolicy(过期,policyConds);
  byte [] binaryData=https://www.yisu.com/zixun/postPolicy.getBytes (StandardCharsets.UTF_8);//将政策字符串进行base64编码
  字符串政策=BinaryUtil.toBase64String (binaryData);//用OSS的AccessKeySecret对base64编码后的政策进行签名
  字符串签名=ossClient.calculatePostSignature (postPolicy); 

前端向OSS服务器上传文件时要上传政策表单域,OSS服务器将对政策表单域的内容进行验证。关于发布政策的详细内容,请参考官方文档:发布政策

当文件上传成功后,OSS服务器会向应用服务器发起回调请求,具体流程如下:

如何在春季启动项目中实现一个文件上传功能

用户只需要在发送给OSS的请求中携带相应的调参数,即能实现回调。

调参数是由一段经过base64编码的JSON字符串(字段)。构建回调参数的关键是指定请求回调的服务器URL (callbackUrl)以及回调的内容(callbackBody)。

//上传回调参数
  回调函数回调=new回调();//指定请求回调的服务器URL
  callback.setCallbackUrl(回调);//(可选)设置回调请求消息头中主机的值,即您的服务器配置主机的值。//callback.setCallbackHost (“yourCallbackHost");//设置发起回调时请求身体的值。
  callback.setCallbackBody(“{\ \ \ \ \ \“文件名”:${对象}\ \ \“mineType \ \ \“: $ {mimeType}}“);//设置发起回调请求的内容类型。
  callback.setCalbackBodyType (Callback.CalbackBodyType.JSON);//设置发起回调请求的自定义参数,由键和值组成,关键必须以x:开始。//callback.addCallbackVar (“x: dir",“value"); 

如何在春季启动项目中实现一个文件上传功能