华为obs 三种文件类型上传及获取


前言

提示:这里可以添加本文要记录的大概内容:

本文主要针对 华为 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)
     */
    @NotBlank
    private String path;

    /**
     * 上传文件参数
     */
    @NotBlank
    private String object;

    /**
     * 存储类别 默认 object:对象 base64:二进制流
     */
    @NotBlank
    private String type;

    /**
     * obs桶名称
     */
    @NotBlank
    private 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)
     */
    @NotBlank
    private String path;

    /**
     * 上传文件参数
     */
    @NotBlank
    private String object;

    /**
     * 存储类别 默认 object:对象 base64:二进制流
     */
    @NotBlank
    private String type;

    /**
     * obs桶名称
     */
    @NotBlank
    private 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)
     */
    @NotBlank
    private String path;

    /**
     * 上传文件参数
     */
    @NotBlank
    private String object;

    /**
     * 存储类别 默认 object:对象 base64:二进制流
     */
    @NotBlank
    private String type;

    /**
     * obs桶名称
     */
    @NotBlank
    private 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存储路径
     */
    @NotBlank
    private String path;

    /**
     * obs 桶名称
     */
    @NotBlank
    private 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());
    //设置key
    request.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 :过期时间

总结

相互学习,共同进步。如有问题,欢迎留言!

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 对于您提出的问题,我可以回答。华为 OBS 存储是一种云存储服务,它可以为开发者提供预定义的标准对象存储服务,并可以实现数据的安全存储、复制、备份和恢复。它使用Flutter作为其开发平台,可以实现快速开发和部署,提高了开发者项目的效率。 ### 回答2: 华为obs存储是一种云存储服务,而flutter是一种跨平台的移动应用开发框架。华为obs存储和flutter可以结合使用,实现在移动应用中使用云存储功能。 使用flutter开发应用时,可以利用华为obs存储的API和SDK,实现文件、下载、管理等功能。开发者可以通过调用华为obs存储的接口,将移动应用中的文件输到华为云的存储空间中,或者从华为云的存储空间中下载文件到应用中进行使用。 华为obs存储提供了稳定可靠的存储服务,具备高可用性和高扩展性,能够满足不同规模的应用需求。同时,华为obs存储还提供了数据加密、多副本备份等安全措施,保障数据的安全性和可靠性。 在使用flutter开发应用时,如果需要使用云存储功能,可以选择集成华为obs存储,通过华为obs存储的API进行文件的上和下载操作,实现应用和云存储之间的数据输。这样可以充分利用云存储的优势,提高应用的数据存储和输效率,为用户提供更好的使用体验。 综上所述,华为obs存储和flutter可以很好地结合使用,实现移动应用中的云存储功能。开发者可以通过调用华为obs存储的接口,实现文件的上、下载和管理等操作,提升应用的数据存储和输效率,为用户提供更好的使用体验。 ### 回答3: 华为OBS存储是华为云提供的对象存储服务,而Flutter是由Google开发的跨平台移动应用开发框架。 华为OBS存储可以用于存储各种类型的数据,包括图片、视频、文档等。在Flutter开发中,我们可以利用华为OBS存储来上、下载和管理这些数据。 首先,我们需要在华为云平台上创建一个OBS存储桶,用于存放我们的数据。然后,通过Flutter提供的网络请求库,我们可以使用华为OBS提供的API接口来实现文件的上和下载。 在Flutter中,我们可以使用一些第三方库来简化与华为OBS存储的交互。例如,可以使用dio库来发送网络请求,通过设置请求头和参数来实现文件的上和下载。我们可以使用华为OBS提供的Access Key和Secret Key来进行身份验证,并指定需要上或下载的文件路径。 除了上和下载,我们还可以利用华为OBS存储的其他功能。例如,可以通过Flutter应用程序与华为OBS存储进行通信,实时获取存储桶的状态信息,如获取当前存储桶中文件的列表、删除指定的文件等操作。 综上所述,华为OBS存储与Flutter的结合可以实现方便、高效的文件、下载及管理功能。通过利用华为OBS存储在移动应用开发中的优势,我们可以提供更好的用户体验和数据管理能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值