You need to enable JavaScript to run this app.
导航
上传资源
最近更新时间:2024.05.30 19:25:50首次发布时间:2022.11.10 17:24:44

阅读本文,您可以获取 Java SDK 上传资源的接口调用示例,实现快速开发。

调用说明

本文提供的接口调用示例均通过 AK 和 SK 初始化实例。

前提条件

调用接口前,请先完成 Java SDK 的安装及初始化操作。

注意事项

若服务内已经存在同名文件,且您开启了重名覆盖上传,则新上传文件在上传路径及文件名重复时将覆盖同名旧文件。若未开启重名覆盖上传,则新文件上传失败。

调用示例

本节为您介绍上传资源各方式的调用示例。

普通上传

您可以指定服务 ID 和上传文件,来获取上传成功的资源 URI。

该接口内部依次调用了 ApplyImageUpload 和 CommitImageUpload 两个 OpenAPI 来实现完整文件上传能力。

接口调用示例如下所示。

package com.volcengine.example.imagex.v2;

import com.volcengine.model.request.ApplyImageUploadRequest;
import com.volcengine.model.response.CommitImageUploadResponse;
import com.volcengine.service.imagex.v2.ImagexService;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

/**
 * 上传文件
 */
public class UploadImage {
    public static void main(String[] args) {
        // 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `ImageXServiceImpl.GetInstance(区域名)` 显式指定区域
        ImagexService service = ImagexService.getInstance();
        service.setAccessKey("ak");
        service.setSecretKey("sk");

        ApplyImageUploadRequest request = new ApplyImageUploadRequest();
        request.setServiceId("service id"); // 服务 ID
        // request.setOverwrite("False");
        try {
            // 读取文件
            List<byte[]> datas = new ArrayList<>();
            datas.add(Files.readAllBytes(Paths.get("image path 1")));
            datas.add(Files.readAllBytes(Paths.get("image path 2")));

            // 上传文件
            CommitImageUploadResponse response = service.uploadImages(request, datas);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

分片上传

对大于 20MB 的文件,您可以通过将文件数据分成多个分片(part)来同时分片上传,最后将所有上传的分片合并为一个文件并获取存储地址。每个分片固定为 20 MB,分片数量默认从 1 开始,最大为 10000。

说明

上传顺序不影响最终的合并分片操作。如果其中任意分片上传失败,可以重新进行上传且不影响其他分片。

package com.volcengine.example.imagex.v2;

import com.volcengine.model.request.ApplyImageUploadRequest;
import com.volcengine.model.response.CommitImageUploadResponse;
import com.volcengine.service.imagex.v2.ImagexService;
import lombok.SneakyThrows;

import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

/**
 * 上传文件
 */
public class UploadImageByStream {
    public static void main(String[] args) {
        // 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `ImageXServiceImpl.GetInstance(区域名)` 显式指定区域
        ImagexService service = ImagexService.getInstance();
        service.setAccessKey("ak");
        service.setSecretKey("sk");

        ApplyImageUploadRequest request = new ApplyImageUploadRequest();
        request.setServiceId("service id");
        // 服务 ID
//        request.setStoreKeys(new ArrayList<>());

        try {
            // 读取文件
            List<InputStream> files = new ArrayList<>();
            List<Long> sizeArr = new ArrayList<>();
            addFile(request, files, sizeArr, "key 1", "path 1");
            addFile(request, files, sizeArr, "key 2", "path 2");

            // 上传文件
            CommitImageUploadResponse response = service.uploadImages(request, files, sizeArr);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @SneakyThrows
    private static void addFile(ApplyImageUploadRequest request, List<InputStream> files, List<Long> sizeArr, String storeKey, String filePath) {
        // 读取文件
        File file = new File(filePath);
        if (request.getStoreKeys() != null) {
            request.getStoreKeys().add(storeKey);
        }
        files.add(Files.newInputStream(file.toPath()));
        sizeArr.add(file.length());
    }
}