java调用接口api
引用
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version></dependency>
配置
ali-oss:endpoint: http://oss-cn-zhangjiakou.aliyuncs.comaccessKeyId: xxxaccessKeySecret: xxxbucketName: xxx
封装
public static String multiUpload(String path) throws IOException {String objectName = System.currentTimeMillis() + new File(path).getName();// 创建InitiateMultipartUploadRequest对象。InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);// 如果需要在初始化分片时设置文件存储类型,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// request.setObjectMetadata(metadata);// 初始化分片。InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);// 返回uploadId,它是分片上传事件的唯一标识,您可以根据这个ID来发起相关的操作,如取消分片上传、查询分片上传等。String uploadId = upresult.getUploadId();// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。List<PartETag> partETags = new ArrayList<PartETag>();// 计算文件有多少个分片。// 1MBfinal long partSize = 1 * 1024 * 1024L;final File sampleFile = new File(path);long fileLength = sampleFile.length();int partCount = (int) (fileLength / partSize);if (fileLength % partSize != 0) {partCount++;}// 遍历分片上传。for (int i = 0; i < partCount; i++) {long startPos = i * partSize;long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;InputStream instream = new FileInputStream(sampleFile);// 跳过已经上传的分片。instream.skip(startPos);UploadPartRequest uploadPartRequest = new UploadPartRequest();uploadPartRequest.setBucketName(bucketName);uploadPartRequest.setKey(objectName);uploadPartRequest.setUploadId(uploadId);uploadPartRequest.setInputStream(instream);// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100KB。uploadPartRequest.setPartSize(curPartSize);// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出这个范围,OSS将返回InvalidArgument的错误码。uploadPartRequest.setPartNumber(i + 1);// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);// 每次上传分片之后,OSS的返回结果会包含一个PartETag。PartETag将被保存到partETags中。partETags.add(uploadPartResult.getPartETag());}// 创建CompleteMultipartUploadRequest对象。// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。CompleteMultipartUploadRequest completeMultipartUploadRequest =new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);// 如果需要在完成文件上传的同时设置文件访问权限,请参考以下示例代码。// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.PublicRead);// 完成上传。CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);// 关闭OSSClient。ossClient.shutdown();return objectName;}public static void listFile() {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 列举文件。 如果不设置KeyPrefix,则列举存储空间下所有的文件。KeyPrefix,则列举包含指定前缀的文件。ObjectListing objectListing = ossClient.listObjects(bucketName);List<OSSObjectSummary> sums = objectListing.getObjectSummaries();for (OSSObjectSummary s : sums) {System.out.println("\t" + s.getKey());}// 关闭OSSClient。ossClient.shutdown();}public static void downloadFile(String remotePath,String localPath) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。File file = new File(localPath);if (!file.getParentFile().exists()) {file.mkdirs();}ossClient.getObject(new GetObjectRequest(bucketName, remotePath),file );// 关闭OSSClient。ossClient.shutdown();}
