华为obs 三种文件类型上传及获取
华为obs 上传及下载
- 前言
- 一、object 上传
- 1.参数示例
- 2.接口地址
- 3.参数信息验证文件
- 4.调用上传接口
- 二、二进制流上传
- 1.参数示例
- 2.接口地址
- 3.参数信息验证文件
- 4.调用上传接口
- 三、本地文件上传 from-data
- 1.参数示例
- 2.接口地址
- 3.参数信息验证文件
- 4. 上传文件
- 5.返回文件转换
- 四、获取url
- 1.参数示例
- 2.接口地址
- 3.参数信息验证文件
- 4. 获取文件地址
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
本文主要针对 华为 obs 三种文件类型上传,及文件获取,列举简单的示例。
三种问及那类型分别是:object、二进制流、from-data
提示:以下是本篇文章正文内容,下面案例可供参考
一、object 上传
1.参数示例
{
"path":"1_test/qrcode/20220622/202206201054548452.png",
"type":"object",
"bucket":"1-private-test",
"source":1,
"object":"https://img2.baidu.com/it/u=3573340222,719722755&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=784"
}参数名 必选 类型 说明
path 是 string 图片在obs存储路径(图片key)
object 是 object/base64/path 上传文件参数
type 是 string 存储类别 默认 object:对象 file:二进制流
bucket 是 string obs 桶名称
source 否 int 路径标识 1 私有 2 公有 (默认私有)
2.接口地址
@PostMapping("/obsBucket/upload")
public ResponseMessage<UploadReturnDTO> upload(@RequestBody @Valid UploadDTO uploadDTO) {//上传文件返回结果return ResponseMessage.success(uploadResourceRecordService.uploadBucket(uploadDTO));
}备注:
UploadDTO :接收参数
UploadReturnDTO 返回参数:自己定义
@RequestBody 传参类型:json
@Valid 验证参数 UploadDTO 文件中的参数
3.参数信息验证文件
package com.hewa.commonservice.obs.dto;import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;/*** 上传文件请求参数*/
@Setter
@Getter
public class UploadDTO implements Serializable {/*** 图片在obs存储路径(图片key)*/@NotBlankprivate String path;/*** 上传文件参数*/@NotBlankprivate String object;/*** 存储类别 默认 object:对象 base64:二进制流*/@NotBlankprivate String type;/*** obs桶名称*/@NotBlankprivate String bucket;/*** 路径标识 1 私有 2 公有 (默认私有)*/private Integer source;
}备注:
NotBlank 验证参数不为空
4.调用上传接口
private PutObjectResult uploadPrivateBucket(UploadDTO uploadDTO,HuaweiObsConfig huaweiObsConfig){PutObjectResult putObjectResult = null;String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);InputStream inputStream = null;HttpURLConnection httpURLConnection = null;// **重点在这里**try {URL url = new URL(uploadDTO.getObject());httpURLConnection = (HttpURLConnection) url.openConnection();// 设置网络连接超时时间httpURLConnection.setConnectTimeout(3000);// 设置应用程序要从网络连接读取数据httpURLConnection.setDoInput(true);httpURLConnection.setRequestMethod("GET");int responseCode = httpURLConnection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {// 从服务器返回一个输入流inputStream = httpURLConnection.getInputStream();} else {inputStream = httpURLConnection.getErrorStream();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}putObjectResult = obsClient.putObject(bucketName, uploadDTO.getPath(), inputStream);return putObjectResult;}备注:
1.content: 就是参数里的object
2.objectname :就是参数里的path
3.其他的参数自己更换就行了
二、二进制流上传
1.参数示例
代码如下(示例):
{
"path":"1_test/qrcode/20220622/202206201054548452.png",
"type":"file",
"bucket":"1-private-test",
"source":1,
"object":"iVBORw0KGgoAAAANSUhEU ...省略...." //二进制流
}参数名 必选 类型 说明
path 是 string 图片在obs存储路径(图片key)
object 是 object/base64/path 上传文件参数
type 是 string 存储类别 默认 object:对象 file:二进制流
bucket 是 string obs 桶名称
source 否 int 路径标识 1 私有 2 公有 (默认私有)
2.接口地址
@PostMapping("/obsBucket/upload")
public ResponseMessage<UploadReturnDTO> upload(@RequestBody @Valid UploadDTO uploadDTO) {//上传文件返回结果return ResponseMessage.success(uploadResourceRecordService.uploadBucket(uploadDTO));
}备注:
UploadDTO :接收参数
UploadReturnDTO 返回参数:自己定义
@RequestBody 传参类型:json
@Valid 验证参数 UploadDTO 文件中的参数
3.参数信息验证文件
package com.hewa.commonservice.obs.dto;import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;/*** 上传文件请求参数*/
@Setter
@Getter
public class UploadDTO implements Serializable {/*** 图片在obs存储路径(图片key)*/@NotBlankprivate String path;/*** 上传文件参数*/@NotBlankprivate String object;/*** 存储类别 默认 object:对象 base64:二进制流*/@NotBlankprivate String type;/*** obs桶名称*/@NotBlankprivate String bucket;/*** 路径标识 1 私有 2 公有 (默认私有)*/private Integer source;
}备注:
NotBlank 验证参数不为空
4.调用上传接口
private PutObjectResult uploadPrivateBucket(UploadDTO uploadDTO,HuaweiObsConfig huaweiObsConfig){PutObjectResult putObjectResult = null;String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例//获取文件类型String fileType = uploadDTO.getPath().substring(uploadDTO.getPath().lastIndexOf(".") + 1);File tempFile = createTempFile(fileType);//生成临时文件FileOutputStream fos = new FileOutputStream(tempFile);boolean success = writeBase64ToFile(uploadDTO.getObject(), fos);if(!success) {throw new ServiceException(ErrorMsg.FILE_CREATE_ERROR);}putObjectResult = obsClient.putObject(bucketName, uploadDTO.getPath(), tempFile);// 删除临时文件tempFile.deleteOnExit();return putObjectResult;}
三、本地文件上传 from-data
1.参数示例
代码如下(示例):
{
"path":"h1_test/qrcode/20220622/202206201054548452.png",
"type":"file",
"bucket":"h1-private-test",
"source":1,
"object":"本地上传文件" //二进制流
}参数名 必选 类型 说明
path 是 string 图片在obs存储路径(图片key)
object 是 file 文件
type 是 string file:文件
bucket 是 string obs 桶名称
source 否 int 路径标识 1 私有 2 公有 (默认私有)
2.接口地址
@PostMapping("/obsBucket/uploadFile")
public ResponseMessage<UploadReturnDTO> uploadFile(MultipartFile object,String path, String type, String bucket, Integer source) throws IOException {//转化成二进制流InputStream inputStream = object.getInputStream();UploadDTO uploadDTO = new UploadDTO();uploadDTO.setPath(path);uploadDTO.setType(type);uploadDTO.setBucket(bucket);uploadDTO.setSource(source);return ResponseMessage.success(uploadResourceRecordService.uploadFileBucket(inputStream,uploadDTO));}备注:
1.from-data 上传接收要用MultipartFile 类型
3.参数信息验证文件
package com.hewa.commonservice.obs.dto;import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;/*** 上传文件请求参数*/
@Setter
@Getter
public class UploadDTO implements Serializable {/*** 图片在obs存储路径(图片key)*/@NotBlankprivate String path;/*** 上传文件参数*/@NotBlankprivate String object;/*** 存储类别 默认 object:对象 base64:二进制流*/@NotBlankprivate String type;/*** obs桶名称*/@NotBlankprivate String bucket;/*** 路径标识 1 私有 2 公有 (默认私有)*/private Integer source;
}
4. 上传文件
@Override
public UploadReturnDTO uploadFileBucket(InputStream inputStream, UploadDTO uploadDTO) {//上传 obs 文件String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);PutObjectResult putObjectResult = obsClient.putObject(uploadDTO.getBucket(), uploadDTO.getPath(), inputStream);return uploadReturnDTO;
}
5.返回文件转换
返回地址会被转码,这里提供里一种转码格式
//转换文件路径
String objectUrl = putObjectResult.getObjectUrl();
objectUrl = objectUrl.replace("%2F","/");
uploadResourceRecord.setWholePath(objectUrl);
四、获取url
1.参数示例
代码如下(示例):
{
"path":"1_test/file/20220627/202206201054548452.png",
"source":1,
"bucket":"1-private-test"}参数名 必选 类型 说明
path 是 string 图片在obs存储路径(图片key)
bucket 是 string obs 桶名称
source 否 int 路径标识 1 私有 2 公有 (默认私有)
2.接口地址
@PostMapping("/obsBucket/getUrl")
public ResponseMessage<String> getUrl(@RequestBody @Valid GetUrlDTO getUrlDTO){System.out.println(getUrlDTO);return ResponseMessage.success(getResourceRecordService.getUrl(getUrlDTO));
}
3.参数信息验证文件
package com.hewa.commonservice.obs.dto;import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;@Setter
@Getter
public class GetUrlDTO implements Serializable {/*** 图片在obs存储路径*/@NotBlankprivate String path;/*** obs 桶名称*/@NotBlankprivate String bucket;/*** 路径标识 1 私有 2 公有 (默认私有)*/private Integer source;
}
4. 获取文件地址
public String getUrl(GetUrlDTO getUrlDTO){//上传 obs 文件String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例ObsClient obsClient = new ObsClient(ak, sk, endPoint);TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, huaweiObsConfig.getExpireSeconds());//设置桶名称request.setBucketName(getUrlDTO.getBucket());//设置keyrequest.setObjectKey(getUrlDTO.getPath());//获取文件地址TemporarySignatureResponse response = obsClient.createTemporarySignature(request);//验证获取文件是否失败if(ObjectUtils.isEmpty(response.getSignedUrl())){log.error("获取临时文件失败",response);throw new ServiceException(ErrorMsg.FILE_URL_ERROR);}return response.getSignedUrl();
}备注:1.getExpireSeconds :过期时间
总结
相互学习,共同进步。如有问题,欢迎留言!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
