对象存储obs

本文介绍了一个基于HTTP协议的文件分段上传和合并的方法,包括获取上传ID、分段上传文件、以及最终的分段合并流程。通过使用OBS客户端和服务端API,实现了大文件的高效稳定上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 List<PartEtag> partEtags = Collections.synchronizedList(new ArrayList<PartEtag>());

    //初始化
    @PostMapping("/getuploadId")
    @ApiOperation(value = "获取uploadid", notes = "获取uploadid")
    public String multipart(HttpServletRequest request) {
        String fileName=request.getParameter("fileName");
        String resourceId=UUID.randomUUID().toString().replaceAll("-","");
        String objectName=resourceId+fileName;
        JSONObject jsonObject=new JSONObject();
        ObsClient obsClient=new ObsClient(ak,sk,endPoint);
        InitiateMultipartUploadRequest request1 = new InitiateMultipartUploadRequest(g_bucketName, objectName);
        InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request1);
        String uploadId = result.getUploadId();
        jsonObject.put("objectName",objectName);
        jsonObject.put("uploadId",uploadId);
        return uploadId;
    }
        @PostMapping("/multipartupload")
    @ApiOperation(value = "分段上传接口", notes = "分段上传接口")
    public int multipartupload(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
        ObsClient obsClient=new ObsClient(ak,sk,endPoint);
        JSONObject jsonObject=new JSONObject();
        EsdkObs2Controller esdkObs2Controller=new EsdkObs2Controller();
        String uploadId=request.getParameter("uploadId");
       String objectName=request.getParameter("objectName");
        String total= request.getParameter("total");
        MultipartFile multipartFile=file;
        String sortNumber=request.getParameter("sortNumber");
        //上传
        PartEtag partEtag=esdkObs2Controller.partUpload(g_bucketName,objectName,uploadId,Integer.parseInt(sortNumber),multipartFile);
        partEtags.add(partEtag);
        //如果上传的总段数等于段号时候合并
        if(total == sortNumber){
            //分片合并
            esdkObs2Controller.combine(g_bucketName,objectName,uploadId,partEtags);
        }

        return 1;
    }

    /**
     * @Title: 分段上传
     */
    public PartEtag partUpload(String bucketName,String objectName,String uploadId,int sortNumber,MultipartFile file){
        ObsClient obsClient=new ObsClient(ak,sk,endPoint);
        PartEtag partEtag=null;
        try{
            UploadPartRequest  request=new UploadPartRequest(bucketName,objectName);
            request.setUploadId(uploadId);
            request.setPartNumber(sortNumber);
            request.setInput(file.getInputStream());
            UploadPartResult result=obsClient.uploadPart(request);
            partEtag= new PartEtag(result.getEtag(),result.getPartNumber());
        }catch (Exception e){
            System.out.print("--------");
        }
        return partEtag;
    }

    /**
     * @Title: 分段合并
     */
    public boolean combine(String bucketName,String objectName,String uploadId,List<PartEtag> partList){
        ObsClient obsClient=new ObsClient(ak,sk,endPoint);
        try{
          CompleteMultipartUploadRequest request=  new CompleteMultipartUploadRequest(bucketName,objectName,uploadId,partList);
            CompleteMultipartUploadResult result=obsClient.completeMultipartUpload(request);
            String url=result.getObjectUrl();
        }catch (Exception e){
            System.out.print("--------");
        }
        return true;
    }

 

### 华为云 OBS 对象存储使用教程 #### 一、初始化 SDK 和创建客户端 为了能够操作华为云对象存储服务 (OBS),首先需要安装并导入对应的 Android SDK。完成环境搭建之后,可以通过如下方式创建一个 OBSClient 实例: ```java // 创建 OBS 客户端实例 ObsConfiguration config = new ObsConfiguration(); config.setEndpoint("your-endpoint"); // 设置终端节点 config.setSocketTimeout(30 * 1000); // 连接超时时间设置为30秒 config.setConnectionTimeout(30 * 1000); ObsClient obsClient = new ObsClient(config, "accessKey", "secretKey"); ``` 此部分代码用于建立与 OBS 的连接,并提供必要的认证信息以便后续执行各种命令[^1]。 #### 二、上传文件至 OBS 存储桶 当拥有有效的 `ObsClient` 后,则可轻松实现向指定 Bucket 中上传本地文件的功能。下面是一个简单的例子展示如何做到这一点: ```java PutObjectRequest request = new PutObjectRequest("bucket-name", "object-key", "/path/to/local/file"); obsClient.putObject(request); System.out.println("Upload succeeded."); ``` 这段程序片段展示了怎样利用 PUT 请求将特定路径下的文件发送给目标 bucket 下的一个 object key 表示的位置。 #### 三、下载文件自 OBS 存储桶 对于从 OBS 获取资源而言,同样依赖于之前构建好的 `ObsClient` 来发起 GET 请求获取所需数据流。这里有一个基本的例子用来说明这个过程: ```java GetObjectRequest request = new GetObjectRequest("bucket-name", "object-key"); InputStream inputStream = null; try { ResponseWrapper<GetObjectResult> response = obsClient.getObject(request); inputStream = response.getResult().getContent(); File file = new File("/path/to/save/downloaded-file"); Files.copy(inputStream, Paths.get(file.toURI()), StandardCopyOption.REPLACE_EXISTING); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) {} } } ``` 上述代码实现了通过 HTTP(S) 流的形式读取远端 Object 并保存到本地磁盘的操作。 #### 四、处理中断或取消下载请求的情况 针对特殊场景下可能存在的中途停止传输需求,在某些情况下允许应用程序主动终止正在进行中的大文件下载任务是非常重要的特性之一。然而遗憾的是官方提供的 Demo 和文档里并未直接提及有关 Android 系统中具体实现方法的内容。因此建议开发者考虑采用异步回调机制配合线程管理工具(如 AsyncTask 或者 RxJava),并在适当时候调用相应 API 方法来达到预期效果。 #### 五、浏览器预览上传至 OBS 的图片或其他类型的文件 为了让用户能够在 Web 页面内查看已上传成功的多媒体素材,通常会借助 HTTPS URL 地址来进行访问控制以及安全加密传输。例如: ```javascript const imageUrl = 'https://ceshiOBS.preview.cn/ceshiwenjian/${info.file.name}'; document.getElementById('image-preview').src = imageUrl; // 假设存在 img 标签 id=image-preview ``` 需要注意的是实际应用环境中应当确保所使用的域名已完成 SSL/TLS 认证部署工作以保障通信链路的安全性[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值