文档管理中心
我的
指南云存储ServerJava上传文件

上传文件

您可以通过云存储SDK快速上传本地设备上的文件到云端。

前提条件

操作步骤

  1. 预先规划云端的文件地址和需要存储到云端的本地文件。
    说明

    如果未规划云端地址,则传入的文件将上传到存储实例根目录,且默认使用源文件名作为云端文件名。

  2. 调用StorageReference.putObject方法将文件上传到云端。
    说明
    • 上传文件时,会对云端文件的名称和大小进行严格的检查,具体限制请参见使用限制。
    • 当通过断点续传的方式上传较大的文件时,服务器对文件的SHA256值校验时间会相对较长,因此需设置一个较大的MaxUploadTimeout值,最大可设置为500秒。

参考代码

收起
自动换行
深色代码主题
复制
  1. public class StorageUpload {
  2. private static StorageManagement storageManagement;
  3. /**
  4. * Upload a file
  5. *
  6. * @throws AGCException AGC exception
  7. */
  8. public static void uploadFile(String bucketName, String filePath, String objectName) throws AGCException {
  9. File file = new File(filePath);
  10. storageManagement = AGCStorageManagement.getInstance(AGCClient.getInstance(), "cn-north-4", bucketName);
  11. StorageReference storageReference = storageManagement.getStorageReference();
  12. String[] result = {""};
  13. ProgressListener listener = new ProgressListener() {
  14. @Override
  15. public void inProgress(ProgressStatus status) {
  16. result[0] = "upload transferred/total:" + status.getTransferredBytes() + "/" + status.getTotalBytes()
  17. + "," + status.getTransferPercentage() + "%, " + "instaneos speed: "
  18. + status.getInstantaneousSpeed() + ", avg speed: " + status.getAverageSpeed();
  19. }
  20. };
  21. ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
  22. service.scheduleAtFixedRate(() -> System.out.println(result[0]), 2, 3, TimeUnit.SECONDS);
  23. PutObjectRequest putObjectRequest = new PutObjectRequest();
  24. putObjectRequest.setObjectMetadata(null);
  25. putObjectRequest.setObjectName(objectName);
  26. putObjectRequest.setUploadFile(file);
  27. putObjectRequest.setProgressListener(listener);
  28. // 调用StorageReference.putObject将文件上传到云端
  29. storageReference.putObject(putObjectRequest);
  30. System.out.println(objectName + " upload succeeded " + storageReference.doesObjectExist(objectName));
  31. service.shutdownNow();
  32. }
  33. public static void initializeClient(String content) throws AGCException {
  34. CredentialService credential =
  35. CredentialParser.toCredentialWithContents(content);
  36. AGCParameter agcParameter = AGCParameter.builder().setCredential(credential).build();
  37. AGCClient.initialize(agcParameter);
  38. System.out.println("init agcParameter Success.");
  39. }
  40. public static void main(String[] args) throws AGCException {
  41. // 存储实例名
  42. String bucketName = "xxxx";
  43. // 设置云端的文件地址和需要存储到云端的本地文件
  44. // 云端文件路径,支持传入“文件目录/文件名”,或仅传入文件名
  45. String objectName = "images/demo.jpg";
  46. // 本地文件路径,支持传入“文件目录/文件名”,或仅传入文件名
  47. String filePath = "images/test.jpg";
  48. // 凭据信息,json格式
  49. String credential = "{\"type\":\"project_client_id\",\"developer_id\":\"xxx\",\"project_id\":\"xxx\",\"client_id\":\"xxx\",\"client_secret\":\"xxx\",\"configuration_version\":\"3.0\",\"region\":\"CN\"}";
  50. StorageUpload.initializeClient(credential);
  51. StorageUpload.uploadFile(bucketName, filePath,objectName);
  52. }
  53. }
说明

在如上示例代码中,AGC云端实际上只存储了一个对象images/demo.jpg,仅提供了一个按斜杠分隔符来进行对象管理的功能。

更多信息