阅读本文,您可以获取 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.setUploadHost("upload host"); // 指定上传域名,域名格式参考 https://www.volcengine.com/docs/508/1537728
// 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<>());
// request.setUploadHost("upload host");
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());
}
}