推特 阿里云技术文档正文

示例 - 上传照片_Java SDK_SDK手册_智能云相册

admin 阿里云技术文档 2020-02-11 235 0
阿里云服务器优惠

示例 - 上传照片

前提条件

请首先阅读并了解智能云相册的上传流程

完整示例代码

相关介绍请见代码中的注释

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import com.aliyun.oss.OSSClient;
  4. import com.aliyuncs.DefaultAcsClient;
  5. import com.aliyuncs.cloudphoto.model.v20170711.CreatePhotoRequest;
  6. import com.aliyuncs.cloudphoto.model.v20170711.CreatePhotoResponse;
  7. import com.aliyuncs.cloudphoto.model.v20170711.CreateTransactionRequest;
  8. import com.aliyuncs.cloudphoto.model.v20170711.CreateTransactionResponse;
  9. import com.aliyuncs.cloudphoto.model.v20170711.CreateTransactionResponse.Transaction;
  10. import com.aliyuncs.cloudphoto.model.v20170711.CreateTransactionResponse.Transaction.Upload;
  11. import com.aliyuncs.profile.DefaultProfile;
  12. import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse.Credentials;
  13. import org.apache.commons.codec.digest.DigestUtils;
  14. public class CreatePhotoDemo {
  15. public static void main(String[] args) throws Exception {
  16. // 与用户业务服务器的对接点
  17. // 自定义getCredentialFromServer函数(需用户自行实现):从用户的业务服务器获得访问智能云相册临时访问凭证、PhotoStore的名称和智能云相册的服务地域等信息。
  18. Credentials credentials = getCredentialFromServer();
  19. String storeName = "<your_photo_store_name>";
  20. String region = "cn-shanghai";
  21. // 初始化客户端 - 在应用生命周期可以只初始化一次,对象可以重用。
  22. // 如果访问凭证过期,需要重新获取
  23. DefaultProfile profile = DefaultProfile.getProfile(region, credentials.getAccessKeyId(),
  24. credentials.getAccessKeySecret(), credentials.getSecurityToken());
  25. DefaultAcsClient acsClient = new DefaultAcsClient(profile);
  26. // 待上传文件的信息,计算其md5
  27. String filepath = "<your_local_file_path>";
  28. File file = new File(filepath);
  29. FileInputStream fin = null;
  30. String md5;
  31. try {
  32. fin = new FileInputStream(file);
  33. md5 = DigestUtils.md5Hex(fin);
  34. fin.close();
  35. } finally {
  36. if (fin != null) {
  37. fin.close();
  38. }
  39. }
  40. // 步骤一:开启上传事务:从上传事务中获取上传文件到OSS的临时密钥和其他创建照片需要的信息
  41. // 1.1 构建请求对象
  42. CreateTransactionRequest request = new CreateTransactionRequest();
  43. request.setMd5(md5);
  44. // 设置文件的扩展名帮助服务端判断文件的类型
  45. request.setExt("jpg");
  46. request.setSize(file.length());
  47. // 指定上传到哪个PhotoStore
  48. request.setStoreName(storeName);
  49. // 1.2 发起请求:
  50. CreateTransactionResponse createTransactionResponse = acsClient.getAcsResponse(request);
  51. Transaction tnx = createTransactionResponse.getTransaction();
  52. Upload upload = tnx.getUpload();
  53. // 步骤二:以下两行代码为构建OSS客户端并上传照片到OSS,本例子采用OSS的简单上传。也可以采用OSS的分块上传,具体参见OSS的文档
  54. OSSClient ossClient = new OSSClient(upload.getOssEndpoint(), upload.getAccessKeyId(),
  55. upload.getAccessKeySecret(), upload.getStsToken());
  56. ossClient.putObject(upload.getBucket(), upload.getObjectKey(), file);
  57. // 步骤三:提交上传事务,完成上传
  58. CreatePhotoRequest createPhotoRequest = new CreatePhotoRequest();
  59. createPhotoRequest.setStoreName(storeName);
  60. createPhotoRequest.setFileId(upload.getFileId());
  61. createPhotoRequest.setSessionId(upload.getSessionId());
  62. createPhotoRequest.setPhotoTitle(file.getName());
  63. createPhotoRequest.setUploadType("manual");
  64. CreatePhotoResponse createPhotoResponse = acsClient.getAcsResponse(createPhotoRequest);
  65. if ("Success".equalsIgnoreCase(createPhotoResponse.getCode())) {
  66. System.out.println("create photo succeeds.");
  67. }
  68. }
  69. }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----