阅读本文,您可以获取 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()); } }