开发者社区 问答 正文

Android-SDK之如何实现上传文件(二)?


Append Object 追加上传




Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。

  1. AppendObjectRequest append = new AppendObjectRequest(testBucket, testObject, uploadFilePath);
  2. ObjectMetadata metadata = new ObjectMetadata();
  3. metadata.setContentType("application/octet-stream");
  4. append.setMetadata(metadata);
  5. // 设置追加位置
  6. append.setPosition(0);
  7. append.setProgressCallback(new OSSProgressCallback<AppendObjectRequest>() {
  8.     @Override
  9.     public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
  10.         Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
  11.     }
  12. });
  13. OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback<AppendObjectRequest, AppendObjectResult>() {
  14.     @Override
  15.     public void onSuccess(AppendObjectRequest request, AppendObjectResult result) {
  16.         Log.d("AppendObject", "AppendSuccess");
  17.         Log.d("NextPosition", "" + result.getNextPosition());
  18.     }
  19.     @Override
  20.     public void onFailure(AppendObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  21.         // 异常处理
  22.     }
  23. });

用户使用Append方式上传,关键要对Position这个参数进行正确的设置:

  • 当用户创建一个Appendable Object时,追加位置设为0。

  • 当对Appendable Object进行内容追加时,追加位置设为Object当前长度。有两种方式获取该Object长度:通过上传追加后的返回内容获取。
  • 通过head object获取文件长度。




上传后回调通知


客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。
具体说明参考: Callback
代码示例:
  1. PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath);
  2. put.setCallbackParam(new HashMap<String, String>() {
  3.     {
  4.         put("callbackUrl", "110.75.82.106/callback");
  5.         put("callbackHost", "oss-cn-hangzhou.aliyuncs.com");
  6.         put("callbackBodyType", "application/json");
  7.         put("callbackBody", "{\"mimeType\":${mimeType},\"size\":${size}}");
  8.     }
  9. });
  10. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
  11.     @Override
  12.     public void onSuccess(PutObjectRequest request, PutObjectResult result) {
  13.         Log.d("PutObject", "UploadSuccess");
  14.         // 只有设置了servercallback,这个值才有数据
  15.         String serverCallbackReturnJson = result.getServerCallbackReturnBody();
  16.         Log.d("servercallback", serverCallbackReturnJson);
  17.     }
  18.     @Override
  19.     public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  20.         // 异常处理
  21.     }
  22. });

如果需要支持自定义参数,参考如下设置:
  1. put.setCallbackParam(new HashMap<String, String>() {
  2.     {
  3.         put("callbackUrl", "http://182.92.192.125/leibin/notify.php");
  4.         put("callbackHost", "oss-cn-hangzhou.aliyuncs.com");
  5.         put("callbackBodyType", "application/json");
  6.         put("callbackBody", "{\"object\":${object},\"size\":${size},\"my_var1\":${x:var1},\"my_var2\":${x:var2}}");
  7.     }
  8. });
  9. put.setCallbackVars(new HashMap<String, String>() {
  10.     {
  11.         put("x:var1", "value1");
  12.         put("x:var2", "value2");
  13.     }
  14. });






展开
收起
青衫无名 2017-10-18 11:54:26 1668 分享 版权
阿里云 AI 助理回答

您提到的Append Object和上传后的回调通知功能是阿里云对象存储OSS(Object Storage Service)服务中的两个重要特性,下面我将为您详细解释这两个功能及其使用方法。

1. Append Object(追加上传)

概念: 追加上传(Append Object)允许用户以追加写的方式向已存在的Appendable Object中添加数据,而不是覆盖原有内容。这对于日志记录、消息队列等需要持续追加数据的场景非常有用。

关键参数Position设置: - 首次创建Appendable Object时Position应设为0,表示从文件开始处追加。 - 后续追加时Position应设为当前Object的长度。获取长度的方法有两种: - 通过上一次AppendObject操作返回的NextPosition值。 - 使用Head Object请求获取Object的当前长度。

示例代码说明: 您的代码片段展示了如何使用Java SDK进行追加上传,包括设置Position、监听上传进度以及处理成功或失败的回调逻辑。

2. 上传后回调通知

概念: 回调通知机制允许用户在OSS完成Object上传后,自动触发一个HTTP请求到用户指定的服务器地址,告知上传结果。这使得用户可以实时处理上传事件,比如更新数据库记录、触发后续任务等。

配置方式: - CallbackUrl:接收回调通知的URL。 - CallbackHost:用于构造回调请求的主机头信息。 - CallbackBodyType:回调内容的类型,如application/json。 - CallbackBody:回调内容模板,支持占位符替换,如${size}会被替换为实际上传文件的大小。

自定义参数: 如果需要在回调中包含自定义参数,可以通过callbackVars设置键值对,然后在callbackBody中引用这些变量,例如${x:var1}

示例代码说明: 提供的代码片段不仅展示了基本的回调设置,还展示了如何加入自定义参数(callbackVars),使得回调通知更加灵活,能够携带更多业务相关的信息。

总结

通过上述说明,您可以了解到阿里云OSS服务中追加上传和上传后回调通知的具体应用方法。追加上传适合于需要不断累积数据的场景,而回调通知则帮助实现自动化处理流程,提高系统集成度和响应速度。正确设置相关参数是确保这些功能正常工作的关键。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答