diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..f80c54e9dd6e4365e04d34935e16ab8a3325134b --- /dev/null +++ b/.gitignore @@ -0,0 +1,190 @@ +# Created by .ignore support plugin (hsz.mobi) +### Android template +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle +build + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml +*.iml +*.ipr +*.iws +out +.idea + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +/.idea/ +/demo/src/main/assets/global.properties diff --git a/ks3-android-sdk/.gitignore b/ks3-android-sdk/.gitignore index 7c4863e306aebb2fc48bfbd75463a06520a2981d..f80c54e9dd6e4365e04d34935e16ab8a3325134b 100644 --- a/ks3-android-sdk/.gitignore +++ b/ks3-android-sdk/.gitignore @@ -187,3 +187,4 @@ Temporary Items .apdisk /.idea/ +/demo/src/main/assets/global.properties diff --git a/ks3-android-sdk/README.md b/ks3-android-sdk/README.md index c9e4c7166fddbbca20c965a7269f3d888dac9a63..e665f000dacabbdd8ab811a5ff70651bed7ae3d7 100644 --- a/ks3-android-sdk/README.md +++ b/ks3-android-sdk/README.md @@ -1,5 +1,36 @@ +## 打包 + +### 打包前注意事项 + +- 修改`ksyun.ks3/util/Constants`内的`VERSION`版本号。 + ### 打包过程 +- 执行 Build --> Clean Project +- 执行 Build --> Rebuild Project +- 打开`ks3-android-sdk/ks3androidsdk/build.gradle` +- 修改`current_version`版本号 +- 执行`makeJar`任务 + +### 打包后jar包路径 + +- ks3-android-sdk/ks3androidsdk/build/libs/ + +### 压缩包整合 + +- 将sdk jar包与依赖包整合为压缩包放至`releases`目录下 + +## demo运行 + +### 运行准备 + +- 在`ks3-android-sdk/demo/src/main`目录下新建`assets`目录 +- 在`assets`目录下新建`global.properties`文件 +- 在`global.properties`文件中添加如下配置 + +``` +ak=your_ak +sk=your_sk +``` -### 注意事项 -- 每次更新,打jar时需要修改`ksyun.ks3/util/Constants`内的`VERSION`版本号。 \ No newline at end of file +- 运行`ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MainActivity.java` \ No newline at end of file diff --git a/ks3-android-sdk/demo/build.gradle b/ks3-android-sdk/demo/build.gradle index 7d296e02d5bfca9ae5d0ef7a337e0cd9a0b11ed5..4afd8b455082ad7ab25260b75be4f3f725d03fa8 100644 --- a/ks3-android-sdk/demo/build.gradle +++ b/ks3-android-sdk/demo/build.gradle @@ -24,6 +24,5 @@ dependencies { implementation 'com.blankj:utilcodex:1.25.8' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'junit:junit:4.12' -// implementation files('libs/ks3-androidsdk-1.5.0.jar') } diff --git a/ks3-android-sdk/demo/src/main/AndroidManifest.xml b/ks3-android-sdk/demo/src/main/AndroidManifest.xml index 5096ab4a7d1ac76c84b2747ad43dd68385455817..e57bb26646b942e5de334d2972799316101b3394 100644 --- a/ks3-android-sdk/demo/src/main/AndroidManifest.xml +++ b/ks3-android-sdk/demo/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + package="com.ks3.demo.main" + android:versionCode="1" + android:versionName="1.0"> @@ -11,31 +11,38 @@ + android:name=".MyApplication" + android:usesCleartextTraffic="true" + android:allowBackup="true" + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" + android:theme="@style/AppTheme"> + android:name=".MainActivity" + android:exported="true" + android:theme="@style/AppTheme" + android:label="@string/app_name"> + android:name=".UploadActivity" + android:exported="true" + android:label="@string/app_name" /> + android:name=".DownloadActivity" + android:exported="true" + android:label="@string/app_name" /> + android:name=".RESTAPITestResult" + android:exported="true" + android:label="@string/title_activity_main" /> - + \ No newline at end of file diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketInpuDialog.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketInpuDialog.java index 4a372ad6f5d326439bd1550c3ebca523ff0df9d9..5fa8780b2dcff33dc4207b5425faae056b936ca9 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketInpuDialog.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketInpuDialog.java @@ -9,6 +9,8 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; +import java.util.Date; + /** * * 自定义Dialog,Bucket输入对话框 diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketObjectInpuDialog.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketObjectInpuDialog.java index 843e3c2cb2335f346926ad9283b33fec4e00260b..56bfcfcb2c7f81f71e605479c0db55e582804511 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketObjectInpuDialog.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/BucketObjectInpuDialog.java @@ -9,6 +9,8 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; +import com.ksyun.ks3.util.StringUtils; + /** * * 自定义Dialog @@ -26,6 +28,7 @@ public class BucketObjectInpuDialog extends Dialog implements private Button cancelBtn; private Context context; private EditText objectField; + private EditText paramField; // 除bucket object外的参数 public BucketObjectInpuDialog(Context context) { super(context); @@ -48,12 +51,35 @@ public class BucketObjectInpuDialog extends Dialog implements private void setUpViews() { bucketField = (EditText) findViewById(R.id.input); objectField = (EditText) findViewById(R.id.input_second); + paramField = findViewById(R.id.param); okBtn = (Button) findViewById(R.id.ok); cancelBtn = (Button) findViewById(R.id.cancel); okBtn.setOnClickListener(this); cancelBtn.setOnClickListener(this); } + public void showParamField () { + this.paramField.setVisibility(View.VISIBLE); + } + + public void hidParamField () { + this.paramField.setVisibility(View.INVISIBLE); + } + + public void setDefaultValue (String bucketName, String objectKey) { + if (StringUtils.isBlank(bucketName)) { + bucketField.setText(bucketName); + } + if (StringUtils.isBlank(objectKey)) { + objectField.setText(objectKey); + } + } + + // 获取param的值 + public String getParamValue () { + return paramField.getText().toString(); + } + @Override public void onClick(View v) { if (listener != null) { @@ -73,6 +99,7 @@ public class BucketObjectInpuDialog extends Dialog implements break; case R.id.cancel: BucketObjectInpuDialog.this.dismiss(); + this.hidParamField(); break; default: break; diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Constants.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Constants.java index 1b9f04eb011c6296278fe85e262eaf33dda0c1c2..2fe15843e2dd7a4a3d20b8422c85b39419a5a709 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Constants.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Constants.java @@ -1,33 +1,38 @@ package com.ks3.demo.main; /** - * * Demo中一些常量 - * */ public class Constants { - // public static final String ACCESS_KEY__ID = "YOUR_ACCESS_KEY_ID"; - // public static final String ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"; - public static final String TEST_TXT = "YOUR_TEST_TXT_IN_SDCARD_ROOT_PATH"; - public static final String TEST_IMG = "YOUR_TEST_IMG_IN_SDCARD_ROOT_PATH"; - protected static final String UPLOAD_ID = "YOUR_UPLOAD_ID"; - // public static final String APP_SERTVER_HOST = - // "http://192.168.231.49:119 - public static final String TEST_MULTIUPLOAD_FILE = "/storage/emulated/0/storage/watch.jpg"; - public static final String TEST_MULTIUPLOAD_BUCKET = "aaabbbccc"; + // public static final String ACCESS_KEY__ID = "YOUR_ACCESS_KEY_ID"; + // public static final String ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"; + public static final String TEST_TXT = "YOUR_TEST_TXT_IN_SDCARD_ROOT_PATH"; + public static final String TEST_IMG = "/storage/emulated/0/storage/watch.jpg"; + protected static final String UPLOAD_ID = "a0112e98e1614a20ab287fab070c2f47"; + // public static final String APP_SERTVER_HOST = + // "http://192.168.231.49:119 + public static final String TEST_MULTIUPLOAD_FILE = "/storage/emulated/0/storage/PDF.pdf"; + public static final String TEST_MULTIUPLOAD_BUCKET = "android-test"; - public static final String APP_SERTVER_HOST = "YOUR_APP_SERVER_HOST"; - // 测试用AK&SK - public static final String ACCESS_KEY__ID = "YOUR_AK"; - public static final String ACCESS_KEY_SECRET = "YOUR_SK"; - public static final String END_POINT = "YOUR_END_POINT"; + public static final String APP_SERTVER_HOST = "YOUR_APP_SERVER_HOST"; + // 测试用AK&SK + public static String ACCESS_KEY__ID = "YOUR_AK"; + public static String ACCESS_KEY_SECRET = "YOUR_SK"; + public static final String END_POINT = "ks3-cn-beijing.ksyuncs.com"; - public static final long MULTI_UPLOAD_THREADHOLD = 1 * 1024 * 1024; + public static final long MULTI_UPLOAD_THREADHOLD = 1 * 1024 * 1024; - public static final int READ_TIMEOUT = 3000; + public static final int READ_TIMEOUT = 3000; - public static final String SRC_BUCKETNAME = ""; - public static final String SRC_OBJECTKEY = ""; - public static final String DST_BUCKETNAME = ""; + public static final String SRC_BUCKETNAME = "android-test"; + public static final String SRC_OBJECTKEY = "1.jpg"; + public static final String DST_BUCKETNAME = "android-test"; + public static final String DST_OBJECTKEY = "1.copy.jpg"; + + // 为调试方便从assets/global.properties文件中读取ak、sk并赋值 不建议在正式环境使用如下方式 + public static void setAKSK(String ak, String sk) { + ACCESS_KEY__ID = ak; + ACCESS_KEY_SECRET = sk; + } } \ No newline at end of file diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/DownloadActivity.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/DownloadActivity.java index 60b46e3f82b9557bbcb86c1b222167af52f67259..299029c6527196200f35fb418bde615162b7a48e 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/DownloadActivity.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/DownloadActivity.java @@ -8,8 +8,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import cz.msebera.android.httpclient.Header; - import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; @@ -34,10 +32,12 @@ import android.widget.Toast; import com.blankj.utilcode.util.ToastUtils; import com.ks3.demo.main.BucketInpuDialog.OnBucketDialogListener; -import com.ksyun.ks3.exception.Ks3Error; +import com.ksyun.ks3.exception.Ks3ClientException; +import com.ksyun.ks3.exception.Ks3ServiceException; import com.ksyun.ks3.model.Ks3ObjectSummary; import com.ksyun.ks3.model.ObjectListing; import com.ksyun.ks3.model.result.GetObjectResult; +import com.ksyun.ks3.model.result.ListObjectsResult; import com.ksyun.ks3.services.Ks3Client; import com.ksyun.ks3.services.Ks3ClientConfiguration; import com.ksyun.ks3.services.handler.GetObjectResponseHandler; @@ -47,428 +47,440 @@ import com.ksyun.ks3.services.request.ListObjectsRequest; import com.ksyun.ks3.util.StringUtils; /** - * * Download相关API使用示例,如getObject,listObject等 - * */ public class DownloadActivity extends Activity implements OnItemClickListener { - private ListView mListView; - private ProgressBar mProgressBar; - private Ks3ClientConfiguration configuration; - private Ks3Client client; - private Map dataSource; - private RemoteFileAdapter adapter; - private TextView currentBucketTextView; - private File storeForder; - private myHandler mHandler = new myHandler(); - private BucketInpuDialog bucketInpuDialog; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_download); - setUp(); - bucketInpuDialog = new BucketInpuDialog(DownloadActivity.this); - prepareStoreForder(); - bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { - @Override - public void confirmBucket(String name) { - // 输入框确获取Bucket之后,开始ListObjects操作 - listObjects(name, null); - } - }); - bucketInpuDialog.show(); - } - - private void prepareStoreForder() { - storeForder = new File(Environment.getExternalStorageDirectory(), - "ksyun_download"); - if (!storeForder.exists()) { - storeForder.mkdirs(); - } else if (storeForder.isFile()) { - storeForder.delete(); - } - } - - private void listObjects(String bucketName, final String prefix) { - final ListObjectsRequest request = new ListObjectsRequest(bucketName); - if (!StringUtils.isBlank(prefix)) - request.setPrefix(prefix); - request.setDelimiter("/"); - client.listObjects(request, new ListObjectsResponseHandler() { - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, - ObjectListing objectListing) { - mProgressBar.setVisibility(View.GONE); - currentBucketTextView.setVisibility(View.VISIBLE); - mListView.setVisibility(View.VISIBLE); - currentBucketTextView.setText("当前路径:Bucket:" - + request.getBucketname() + "-" + prefix); - - List objectSummaries = objectListing - .getObjectSummaries(); - if (objectSummaries != null && objectSummaries.size() != 0) { - for (Ks3ObjectSummary object : objectSummaries) { - String objectKey = object.getKey(); - if (dataSource.get(objectKey) == null) { - RemoteFile remoteFile = new RemoteFile(); - remoteFile.bucketName = objectListing - .getBucketName(); - remoteFile.objectKey = objectKey; - remoteFile.isCommomPrefix = false; - remoteFile.icon = DemoUtils.matchImage( - DownloadActivity.this, false, objectKey); - remoteFile.size = object.getSize(); - remoteFile.lastModified = object.getLastModified(); - remoteFile.progress = 0; - remoteFile.status = RemoteFile.STATUS_NOT_START; - dataSource.put(objectKey, remoteFile); - } - } - } - List commonPrefixes = objectListing.getCommonPrefixes(); - if (commonPrefixes != null && commonPrefixes.size() != 0) { - for (String prifix : commonPrefixes) { - RemoteFile remoteFile = new RemoteFile(); - remoteFile.bucketName = objectListing.getBucketName(); - remoteFile.objectKey = prifix; - remoteFile.icon = DemoUtils.matchImage( - DownloadActivity.this, true, prifix); - remoteFile.progress = 0; - remoteFile.isCommomPrefix = true; - remoteFile.status = RemoteFile.STATUS_NOT_START; - dataSource.put(prifix, remoteFile); - } - } - adapter.fillDatas(); - } - - @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - - } - }); - } - - private void setUp() { - // Ks3Client初始化 - configuration = Ks3ClientConfiguration.getDefaultConfiguration(); - client = Ks3ClientFactory.getDefaultClient(this); - - // AuthListener方式初始化 - // client = new Ks3Client(new AuthListener() { - // @Override - // public String onCalculateAuth(final String httpMethod, - // final String ContentType, final String Date, - // final String ContentMD5, final String Resource, - // final String Headers) { - // // 此处应由APP端向业务服务器发送post请求返回Token。 - // // 需要注意该回调方法运行在非主线程 - // // 此处内部写法仅为示例,开发者请根据自身情况修改 - // StringBuffer result = new StringBuffer(); - // HttpPost request = new HttpPost(Constants.APP_SERTVER_HOST); - // StringEntity se; - // try { - // JSONObject object = new JSONObject(); - // object.put("http_method", httpMethod.toString()); - // object.put("content_type", ContentType); - // object.put("date", Date); - // object.put("content_md5", ContentMD5); - // object.put("resource", Resource); - // object.put("headers", Headers); - // se = new StringEntity(object.toString()); - // request.setEntity(se); - // HttpResponse httpResponse = new DefaultHttpClient().execute(request); - // String retSrc = EntityUtils.toString(httpResponse - // .getEntity()); - // result.append(retSrc); - // } catch (JSONException e) { - // e.printStackTrace(); - // } catch (UnsupportedEncodingException e) { - // e.printStackTrace(); - // } catch (ClientProtocolException e) { - // e.printStackTrace(); - // } catch (IOException e) { - // e.printStackTrace(); - // } - // return result.toString(); - // } - // }, DownloadActivity.this); - - // UI初始化 - currentBucketTextView = (TextView) findViewById(R.id.current_bucket_tv); - mListView = (ListView) findViewById(R.id.object_list); - mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); - dataSource = new HashMap(); - adapter = new RemoteFileAdapter(this, null); - mListView.setAdapter(adapter); - mListView.setOnItemClickListener(this); - } - - class RemoteFileAdapter extends BaseAdapter { - private List mRemoteFiles; - private LayoutInflater mInflater; - - RemoteFileAdapter(Context context, List remoteFiles) { - this.mRemoteFiles = new ArrayList(); - if (remoteFiles != null) - this.mRemoteFiles.addAll(remoteFiles); - this.mInflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - @Override - public int getCount() { - return mRemoteFiles.size(); - } - - @Override - public RemoteFile getItem(int position) { - return this.mRemoteFiles.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - public void fillDatas() { - this.mRemoteFiles.clear(); - for (Entry entry : dataSource.entrySet()) { - this.mRemoteFiles.add(entry.getValue()); - } - this.notifyDataSetChanged(); - } - - public void updateCurrent() { - this.notifyDataSetChanged(); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder; - if (convertView == null) { - convertView = mInflater.inflate(R.layout.download_list_item, - parent, false); - viewHolder = new ViewHolder(); - viewHolder.remoteObjectIcon = (ImageView) convertView - .findViewById(R.id.remote_object_icon); - viewHolder.remoteObjectKeyTextView = (TextView) convertView - .findViewById(R.id.remote_object_key); - viewHolder.remoteObjectSummaryLayout = (LinearLayout) convertView - .findViewById(R.id.remote_object_summary_layout); - viewHolder.remoteObjectSizeTextView = (TextView) convertView - .findViewById(R.id.remote_object_size); - viewHolder.remoteObjectModiyTextView = (TextView) convertView - .findViewById(R.id.remote_object_last_modiy); - viewHolder.downloadSummaryLayout = (LinearLayout) convertView - .findViewById(R.id.progress_summary_layout); - viewHolder.downloadProgressBar = (ProgressBar) convertView - .findViewById(R.id.download_progress_bar); - viewHolder.progressTextView = (TextView) convertView - .findViewById(R.id.download_progress_txt); - viewHolder.downloadBtn = (ImageView) convertView - .findViewById(R.id.download_btn); - convertView.setTag(viewHolder); - } else { - viewHolder = (ViewHolder) convertView.getTag(); - } - viewHolder.remoteObjectIcon.setImageDrawable(mRemoteFiles - .get(position).icon); - viewHolder.remoteObjectKeyTextView.setText(mRemoteFiles - .get(position).objectKey); - - if (!mRemoteFiles.get(position).isCommomPrefix) { - viewHolder.remoteObjectKeyTextView.setVisibility(View.VISIBLE); - long size = mRemoteFiles.get(position).size; - String sizeStr = "unkown-size"; - - if (size >= 1024 * 1024) { - sizeStr = ((int) (size / 1024 / 1024) * 100) / 100 + "MB"; - } else { - sizeStr = (size / 1024) + "kb"; - } - viewHolder.remoteObjectSizeTextView.setText(sizeStr); - String modiyStr = DemoUtils.formatDate(mRemoteFiles - .get(position).lastModified); - viewHolder.remoteObjectModiyTextView.setText(modiyStr); - if (mRemoteFiles.get(position).status > RemoteFile.STATUS_NOT_START) { - viewHolder.downloadSummaryLayout - .setVisibility(View.VISIBLE); - viewHolder.downloadProgressBar.setProgress(mRemoteFiles - .get(position).progress); - viewHolder.remoteObjectSummaryLayout - .setVisibility(View.GONE); - viewHolder.downloadBtn.setVisibility(View.GONE); - switch (mRemoteFiles.get(position).status) { - case RemoteFile.STATUS_STARTED: - viewHolder.progressTextView.setText("准备"); - break; - case RemoteFile.STATUS_DOWNLOADING: - viewHolder.progressTextView.setText(mRemoteFiles - .get(position).progress + "%"); - break; - case RemoteFile.STATUS_FINISH: - viewHolder.progressTextView.setText("完成下载"); - break; - case RemoteFile.STATUS_FAIL: - viewHolder.progressTextView.setText("下载失败"); - break; - } - } else { - viewHolder.remoteObjectSummaryLayout - .setVisibility(View.VISIBLE); - viewHolder.downloadBtn.setVisibility(View.VISIBLE); - viewHolder.downloadSummaryLayout.setVisibility(View.GONE); - } - } else { - viewHolder.remoteObjectSummaryLayout.setVisibility(View.GONE); - viewHolder.downloadSummaryLayout.setVisibility(View.GONE); - viewHolder.downloadBtn.setVisibility(View.GONE); - } - - return convertView; - } - } - - class ViewHolder { - ImageView remoteObjectIcon; - TextView remoteObjectKeyTextView; - LinearLayout remoteObjectSummaryLayout; - TextView remoteObjectSizeTextView; - TextView remoteObjectModiyTextView; - LinearLayout downloadSummaryLayout; - ProgressBar downloadProgressBar; - TextView progressTextView; - ImageView downloadBtn; - } - - class RemoteFile { - static final int STATUS_NOT_START = 0; - static final int STATUS_STARTED = 1; - static final int STATUS_DOWNLOADING = 2; - static final int STATUS_FINISH = 3; - static final int STATUS_FAIL = 4; - Drawable icon; - String bucketName; - String objectKey; - long size; - Date lastModified; - int progress; - int status; - boolean isCommomPrefix; - - @Override - public String toString() { - return bucketName + ",download?" + status + ",progress:" + progress; - } - } - - @Override - public void onItemClick(AdapterView adpterView, final View view, - final int position, long arg3) { - final RemoteFile item = adapter.getItem(position); - if (item.isCommomPrefix) { - // listObjects(item.bucketName, item.objectKey); - Toast.makeText(this, "请自行实现下一级目录的检索", Toast.LENGTH_LONG).show(); - } else { - if (item.status == RemoteFile.STATUS_STARTED - || item.status == RemoteFile.STATUS_DOWNLOADING - || item.status == RemoteFile.STATUS_FINISH) - return; - - // 下载操作示例 - final GetObjectRequest request = new GetObjectRequest( - item.bucketName, item.objectKey); - String objectName = item.objectKey.substring(item.objectKey - .lastIndexOf("/") == -1 ? 0 : item.objectKey - .lastIndexOf("/")); + private ListView mListView; + private ProgressBar mProgressBar; + private Ks3ClientConfiguration configuration; + private Ks3Client client; + private Map dataSource; + private RemoteFileAdapter adapter; + private TextView currentBucketTextView; + private File storeForder; + private myHandler mHandler = new myHandler(); + private BucketInpuDialog bucketInpuDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_download); + setUp(); + bucketInpuDialog = new BucketInpuDialog(DownloadActivity.this); + prepareStoreForder(); + bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { + @Override + public void confirmBucket(final String name) { + // 输入框确获取Bucket之后,开始ListObjects操作 + listObjects(name, null); + } + }); + bucketInpuDialog.show(); + } + + private void prepareStoreForder() { + storeForder = new File(Environment.getExternalStorageDirectory(), + "ksyun_download"); + if (!storeForder.exists()) { + storeForder.mkdirs(); + } else if (storeForder.isFile()) { + storeForder.delete(); + } + } + + private void listObjects(String bucketName, final String prefix) { + final ListObjectsRequest request = new ListObjectsRequest(bucketName); + if (!StringUtils.isBlank(prefix)) + request.setPrefix(prefix); + request.setDelimiter("/"); + client.listObjects(request, new ListObjectsResponseHandler() { + @Override + public void onSuccess(ListObjectsRequest listObjectsRequest, ListObjectsResult result) { + ObjectListing objectListing = result.getObjectListing(); + List objectSummaries = objectListing + .getObjectSummaries(); + if (objectSummaries != null && objectSummaries.size() != 0) { + for (Ks3ObjectSummary object : objectSummaries) { + String objectKey = object.getKey(); + if (dataSource.get(objectKey) == null) { + RemoteFile remoteFile = new RemoteFile(); + remoteFile.bucketName = objectListing + .getBucketName(); + remoteFile.objectKey = objectKey; + remoteFile.isCommomPrefix = false; + remoteFile.icon = DemoUtils.matchImage( + DownloadActivity.this, false, objectKey); + remoteFile.size = object.getSize(); + remoteFile.lastModified = object.getLastModified(); + remoteFile.progress = 0; + remoteFile.status = RemoteFile.STATUS_NOT_START; + dataSource.put(objectKey, remoteFile); + } + } + } + List commonPrefixes = objectListing.getCommonPrefixes(); + if (commonPrefixes != null && commonPrefixes.size() != 0) { + for (String prifix : commonPrefixes) { + RemoteFile remoteFile = new RemoteFile(); + remoteFile.bucketName = objectListing.getBucketName(); + remoteFile.objectKey = prifix; + remoteFile.icon = DemoUtils.matchImage( + DownloadActivity.this, true, prifix); + remoteFile.progress = 0; + remoteFile.isCommomPrefix = true; + remoteFile.status = RemoteFile.STATUS_NOT_START; + dataSource.put(prifix, remoteFile); + } + } + + runOnUiThread(new Runnable() { + @Override + public void run() { + mProgressBar.setVisibility(View.GONE); + currentBucketTextView.setVisibility(View.VISIBLE); + mListView.setVisibility(View.VISIBLE); + String path = StringUtils.isBlank(prefix) ? "" : "-" + prefix; + currentBucketTextView.setText("当前路径:Bucket:" + + request.getBucketname() + path); + adapter.fillDatas(); + } + }); + } + + @Override + public void onFailure(ListObjectsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { +// System.err.println(paramThrowable); + if (clientException != null) { + System.err.println(clientException.getMessage()); + } + if (serviceException != null) { + System.err.println(serviceException.getResponse()); + } + runOnUiThread(new Runnable() { + @Override + public void run() { + ToastUtils.showShort("获取列表异常"); + } + }); + finish(); + } + }); + } + + private void setUp() { + // Ks3Client初始化 + configuration = Ks3ClientConfiguration.getDefaultConfiguration(); + client = Ks3ClientFactory.getDefaultClient(this); + + // AuthListener方式初始化 + // client = new Ks3Client(new AuthListener() { + // @Override + // public String onCalculateAuth(final String httpMethod, + // final String ContentType, final String Date, + // final String ContentMD5, final String Resource, + // final String Headers) { + // // 此处应由APP端向业务服务器发送post请求返回Token。 + // // 需要注意该回调方法运行在非主线程 + // // 此处内部写法仅为示例,开发者请根据自身情况修改 + // StringBuffer result = new StringBuffer(); + // HttpPost request = new HttpPost(Constants.APP_SERTVER_HOST); + // StringEntity se; + // try { + // JSONObject object = new JSONObject(); + // object.put("http_method", httpMethod.toString()); + // object.put("content_type", ContentType); + // object.put("date", Date); + // object.put("content_md5", ContentMD5); + // object.put("resource", Resource); + // object.put("headers", Headers); + // se = new StringEntity(object.toString()); + // request.setEntity(se); + // HttpResponse httpResponse = new DefaultHttpClient().execute(request); + // String retSrc = EntityUtils.toString(httpResponse + // .getEntity()); + // result.append(retSrc); + // } catch (JSONException e) { + // e.printStackTrace(); + // } catch (UnsupportedEncodingException e) { + // e.printStackTrace(); + // } catch (ClientProtocolException e) { + // e.printStackTrace(); + // } catch (IOException e) { + // e.printStackTrace(); + // } + // return result.toString(); + // } + // }, DownloadActivity.this); + + // UI初始化 + currentBucketTextView = (TextView) findViewById(R.id.current_bucket_tv); + mListView = (ListView) findViewById(R.id.object_list); + mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); + dataSource = new HashMap(); + adapter = new RemoteFileAdapter(this, null); + mListView.setAdapter(adapter); + mListView.setOnItemClickListener(this); + } + + class RemoteFileAdapter extends BaseAdapter { + private List mRemoteFiles; + private LayoutInflater mInflater; + + RemoteFileAdapter(Context context, List remoteFiles) { + this.mRemoteFiles = new ArrayList(); + if (remoteFiles != null) + this.mRemoteFiles.addAll(remoteFiles); + this.mInflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public int getCount() { + return mRemoteFiles.size(); + } + + @Override + public RemoteFile getItem(int position) { + return this.mRemoteFiles.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + public void fillDatas() { + this.mRemoteFiles.clear(); + for (Entry entry : dataSource.entrySet()) { + this.mRemoteFiles.add(entry.getValue()); + } + this.notifyDataSetChanged(); + } + + public void updateCurrent() { + this.notifyDataSetChanged(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + convertView = mInflater.inflate(R.layout.download_list_item, + parent, false); + viewHolder = new ViewHolder(); + viewHolder.remoteObjectIcon = (ImageView) convertView + .findViewById(R.id.remote_object_icon); + viewHolder.remoteObjectKeyTextView = (TextView) convertView + .findViewById(R.id.remote_object_key); + viewHolder.remoteObjectSummaryLayout = (LinearLayout) convertView + .findViewById(R.id.remote_object_summary_layout); + viewHolder.remoteObjectSizeTextView = (TextView) convertView + .findViewById(R.id.remote_object_size); + viewHolder.remoteObjectModiyTextView = (TextView) convertView + .findViewById(R.id.remote_object_last_modiy); + viewHolder.downloadSummaryLayout = (LinearLayout) convertView + .findViewById(R.id.progress_summary_layout); + viewHolder.downloadProgressBar = (ProgressBar) convertView + .findViewById(R.id.download_progress_bar); + viewHolder.progressTextView = (TextView) convertView + .findViewById(R.id.download_progress_txt); + viewHolder.downloadBtn = (ImageView) convertView + .findViewById(R.id.download_btn); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + viewHolder.remoteObjectIcon.setImageDrawable(mRemoteFiles + .get(position).icon); + viewHolder.remoteObjectKeyTextView.setText(mRemoteFiles + .get(position).objectKey); + + if (!mRemoteFiles.get(position).isCommomPrefix) { + viewHolder.remoteObjectKeyTextView.setVisibility(View.VISIBLE); + long size = mRemoteFiles.get(position).size; + String sizeStr = "unkown-size"; + + if (size >= 1024 * 1024) { + sizeStr = ((int) (size / 1024 / 1024) * 100) / 100 + "MB"; + } else { + sizeStr = (size / 1024) + "kb"; + } + viewHolder.remoteObjectSizeTextView.setText(sizeStr); + String modiyStr = DemoUtils.formatDate(mRemoteFiles + .get(position).lastModified); + viewHolder.remoteObjectModiyTextView.setText(modiyStr); + if (mRemoteFiles.get(position).status > RemoteFile.STATUS_NOT_START) { + viewHolder.downloadSummaryLayout + .setVisibility(View.VISIBLE); + viewHolder.downloadProgressBar.setProgress(mRemoteFiles + .get(position).progress); + viewHolder.remoteObjectSummaryLayout + .setVisibility(View.GONE); + viewHolder.downloadBtn.setVisibility(View.GONE); + switch (mRemoteFiles.get(position).status) { + case RemoteFile.STATUS_STARTED: + viewHolder.progressTextView.setText("准备"); + break; + case RemoteFile.STATUS_DOWNLOADING: + viewHolder.progressTextView.setText(mRemoteFiles + .get(position).progress + "%"); + break; + case RemoteFile.STATUS_FINISH: + viewHolder.progressTextView.setText("完成下载"); + break; + case RemoteFile.STATUS_FAIL: + viewHolder.progressTextView.setText("下载失败"); + break; + } + } else { + viewHolder.remoteObjectSummaryLayout + .setVisibility(View.VISIBLE); + viewHolder.downloadBtn.setVisibility(View.VISIBLE); + viewHolder.downloadSummaryLayout.setVisibility(View.GONE); + } + } else { + viewHolder.remoteObjectSummaryLayout.setVisibility(View.GONE); + viewHolder.downloadSummaryLayout.setVisibility(View.GONE); + viewHolder.downloadBtn.setVisibility(View.GONE); + } + + return convertView; + } + } + + class ViewHolder { + ImageView remoteObjectIcon; + TextView remoteObjectKeyTextView; + LinearLayout remoteObjectSummaryLayout; + TextView remoteObjectSizeTextView; + TextView remoteObjectModiyTextView; + LinearLayout downloadSummaryLayout; + ProgressBar downloadProgressBar; + TextView progressTextView; + ImageView downloadBtn; + } + + class RemoteFile { + static final int STATUS_NOT_START = 0; + static final int STATUS_STARTED = 1; + static final int STATUS_DOWNLOADING = 2; + static final int STATUS_FINISH = 3; + static final int STATUS_FAIL = 4; + Drawable icon; + String bucketName; + String objectKey; + long size; + Date lastModified; + int progress; + int status; + boolean isCommomPrefix; + + @Override + public String toString() { + return bucketName + ",download?" + status + ",progress:" + progress; + } + } + + @Override + public void onItemClick(AdapterView adpterView, final View view, + final int position, long arg3) { + final RemoteFile item = adapter.getItem(position); + if (item.isCommomPrefix) { + // listObjects(item.bucketName, item.objectKey); + Toast.makeText(this, "请自行实现下一级目录的检索", Toast.LENGTH_LONG).show(); + } else { + if (item.status == RemoteFile.STATUS_STARTED + || item.status == RemoteFile.STATUS_DOWNLOADING + || item.status == RemoteFile.STATUS_FINISH) + return; + ToastUtils.showShort("开始下载"); + // 下载操作示例 + final GetObjectRequest request = new GetObjectRequest(item.bucketName, item.objectKey); + String objectName = item.objectKey.substring(item.objectKey + .lastIndexOf("/") == -1 ? 0 : item.objectKey + .lastIndexOf("/")); // request.setCallBack(callBackUrl, callBackBody, callBackHeaders); - File file = new File(storeForder, objectName); - client.getObject(request, new GetObjectResponseHandler(file, - item.bucketName, item.objectKey) { - - @Override - public void onTaskSuccess(int paramInt, - Header[] paramArrayOfHeader, - GetObjectResult getObjectResult) { - ToastUtils.showShort("下载成功"); - - } - - @Override - public void onTaskStart() { -// RemoteFile remoteFile = dataSource.get(item.objectKey); -// remoteFile.status = RemoteFile.STATUS_STARTED; -// remoteFile.progress = 0; -// item.status = RemoteFile.STATUS_STARTED; -// item.progress = 0; - mHandler.sendEmptyMessage(0); - - } - - @Override - public void onTaskProgress(double progress) { -// if (progress > 50.0) { -// request.abort(); + final File file = new File(storeForder, objectName); + doGet(item, request, file); +// new Thread(){ +// @Override +// public void run() { +// try { +// +//// request.setRange(10, 110); +// List constraints = new ArrayList<>(); +//// constraints.add("1a88496760c8eb470794dd8ba504fd22"); +// request.setMatchingETagConstraints(constraints); +// GetObjectResult result = client.syncGetObject(request); +// long length = result.getObject().getObjectMetadata().getContentLength(); +// Log.d("DownloadActivity", "同步方法获取到的长度:" + length); +// saveToLocal(file, result); +// } catch (Throwable throwable) { +// throwable.printStackTrace(); // } +// } +// }.start(); + } + + } + + private void doGet(final RemoteFile item, final GetObjectRequest request, final File file) { + client.getObject(request, new GetObjectResponseHandler(file, item.bucketName, item.objectKey) { + @Override + public void onSuccess(GetObjectRequest request, GetObjectResult result) { + ToastUtils.showShort("下载成功"); + Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, "download [" + item.objectKey + "] success"); + // 请求成功。 + Utils.saveToLocal(file, result); + } + + + @Override + public void onTaskProgress(double progress) { + Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, "onTaskProgress [" + progress + "]"); + if (progress > 50.0) { + request.abort(); + } // RemoteFile remoteFile = dataSource.get(item.objectKey); // remoteFile.status = RemoteFile.STATUS_DOWNLOADING; // remoteFile.progress = (int) progress; // item.status = RemoteFile.STATUS_DOWNLOADING; // item.progress = (int) progress; - mHandler.sendEmptyMessage(0); - } + mHandler.sendEmptyMessage(0); + } + + @Override + public void onFailure(GetObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, + serviceException.getStatusCode() + " failure: reason = " + serviceException.getResponse()); + System.err.println(serviceException.getResponse()); + ToastUtils.showShort("下载失败"); + mHandler.sendEmptyMessage(0); + } + + @Override + public void onTaskCancel() { + ToastUtils.showShort("下载任务取消"); + } + }); + } + + @SuppressLint("HandlerLeak") + class myHandler extends Handler { + @Override + public void handleMessage(Message msg) { + int what = msg.what; + switch (what) { + case 0: + adapter.updateCurrent(); + break; + default: + break; + } + } + } - @Override - public void onTaskFinish() { -// RemoteFile remoteFile = dataSource.get(item.objectKey); -// remoteFile.status = RemoteFile.STATUS_FINISH; -// remoteFile.progress = 100; -// item.status = RemoteFile.STATUS_FINISH; -// item.progress = 100; - mHandler.sendEmptyMessage(0); - } - - @Override - public void onTaskCancel() { - Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, "cancle ok"); - } - - @Override - public void onTaskFailure(int paramInt, Ks3Error ks3Error, - Header[] paramArrayOfHeader, Throwable paramThrowable, - File paramFile) { - Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, - paramInt+"failure: reason = " + paramThrowable.toString()+"/n"+"response:"+ks3Error.getErrorMessage()); - ToastUtils.showShort("下载失败"); -// RemoteFile remoteFile = dataSource.get(item.objectKey); -// remoteFile.status = RemoteFile.STATUS_FAIL; -// item.status = RemoteFile.STATUS_FAIL; - mHandler.sendEmptyMessage(0); - } - }); - } - - } - - @SuppressLint("HandlerLeak") - class myHandler extends Handler { - @Override - public void handleMessage(Message msg) { - int what = msg.what; - switch (what) { - case 0: - adapter.updateCurrent(); - break; - default: - break; - } - } - } } diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MainActivity.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MainActivity.java index 41b833815ef2c815a1a044528203e9ff251b10b0..6efc22910cf4aa696afb86affcb4d5d44b1b91e0 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MainActivity.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MainActivity.java @@ -1,6 +1,7 @@ package com.ks3.demo.main; import static com.ks3.demo.main.Constants.DST_BUCKETNAME; +import static com.ks3.demo.main.Constants.DST_OBJECTKEY; import static com.ks3.demo.main.Constants.END_POINT; import static com.ks3.demo.main.Constants.SRC_BUCKETNAME; import static com.ks3.demo.main.Constants.SRC_OBJECTKEY; @@ -9,7 +10,7 @@ import static com.ks3.demo.main.Constants.TEST_MULTIUPLOAD_FILE; import android.app.AlertDialog.Builder; import android.content.Intent; import android.os.Bundle; -import android.os.Looper; +import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.AdapterView; @@ -23,70 +24,126 @@ import androidx.appcompat.app.AppCompatActivity; import com.blankj.utilcode.constant.PermissionConstants; import com.blankj.utilcode.util.PermissionUtils; +import com.blankj.utilcode.util.StringUtils; +import com.blankj.utilcode.util.ToastUtils; import com.ks3.demo.main.BucketInpuDialog.OnBucketDialogListener; import com.ks3.demo.main.BucketObjectInpuDialog.OnBucketObjectDialogListener; -import com.ksyun.ks3.exception.Ks3Error; +import com.ksyun.ks3.exception.Ks3ClientException; +import com.ksyun.ks3.exception.Ks3ServiceException; import com.ksyun.ks3.model.Bucket; +import com.ksyun.ks3.model.BucketQuota; import com.ksyun.ks3.model.Ks3ObjectSummary; import com.ksyun.ks3.model.ObjectListing; import com.ksyun.ks3.model.ObjectMetadata; -import com.ksyun.ks3.model.Owner; +import com.ksyun.ks3.model.Part; +import com.ksyun.ks3.model.PartETag; import com.ksyun.ks3.model.PostObjectFormFields; -import com.ksyun.ks3.model.acl.AccessControlPolicy; -import com.ksyun.ks3.model.acl.Authorization; import com.ksyun.ks3.model.acl.CannedAccessControlList; -import com.ksyun.ks3.model.acl.Grant; -import com.ksyun.ks3.model.result.BucketQuota; -import com.ksyun.ks3.model.result.CopyResult; +import com.ksyun.ks3.model.result.AbortMultipartUploadResult; +import com.ksyun.ks3.model.result.CompleteMultipartUploadResult; +import com.ksyun.ks3.model.result.CopyObjectResult; +import com.ksyun.ks3.model.result.CreateBucketResult; +import com.ksyun.ks3.model.result.DeleteBucketPolicyResult; +import com.ksyun.ks3.model.result.DeleteBucketQuotaResult; +import com.ksyun.ks3.model.result.DeleteBucketReplicationResult; +import com.ksyun.ks3.model.result.DeleteBucketResult; +import com.ksyun.ks3.model.result.DeleteObjectResult; +import com.ksyun.ks3.model.result.DeleteObjectTaggingResult; +import com.ksyun.ks3.model.result.GetBucketACLResult; +import com.ksyun.ks3.model.result.GetBucketPolicyResult; +import com.ksyun.ks3.model.result.GetBucketQuotaResult; +import com.ksyun.ks3.model.result.GetBucketReplicationResult; +import com.ksyun.ks3.model.result.GetObjectACLResult; +import com.ksyun.ks3.model.result.GetObjectAdpResult; +import com.ksyun.ks3.model.result.GetObjectResult; +import com.ksyun.ks3.model.result.GetObjectTaggingResult; +import com.ksyun.ks3.model.result.HeadBucketResult; import com.ksyun.ks3.model.result.HeadObjectResult; +import com.ksyun.ks3.model.result.InitiateMultipartUploadResult; +import com.ksyun.ks3.model.result.Ks3Result; +import com.ksyun.ks3.model.result.ListBucketsResult; +import com.ksyun.ks3.model.result.ListObjectsResult; import com.ksyun.ks3.model.result.ListPartsResult; -import com.ksyun.ks3.model.result.PutAdpResult; -import com.ksyun.ks3.model.result.ReplicationRule; -import com.ksyun.ks3.model.result.policy.BucketPolicyConditionRule; -import com.ksyun.ks3.model.result.policy.BucketPolicyRule; +import com.ksyun.ks3.model.result.PutBucketACLResult; +import com.ksyun.ks3.model.result.PutBucketPolicyResult; +import com.ksyun.ks3.model.result.PutBucketQuotaResult; +import com.ksyun.ks3.model.result.PutBucketReplicationResult; +import com.ksyun.ks3.model.result.PutObjectACLResult; +import com.ksyun.ks3.model.result.PutObjectAdpResult; +import com.ksyun.ks3.model.result.PutObjectFetchResult; +import com.ksyun.ks3.model.result.PutObjectResult; +import com.ksyun.ks3.model.result.PutObjectTaggingResult; +import com.ksyun.ks3.model.ReplicationRule; +import com.ksyun.ks3.model.result.UploadPartResult; import com.ksyun.ks3.services.Ks3Client; import com.ksyun.ks3.services.Ks3ClientConfiguration; +import com.ksyun.ks3.services.MultiUploader; +import com.ksyun.ks3.services.handler.AbortMultipartUploadResponseHandler; +import com.ksyun.ks3.services.handler.CompleteMultipartUploadResponseHandler; import com.ksyun.ks3.services.handler.CopyObjectResponseHandler; -import com.ksyun.ks3.services.handler.CreateBucketResponceHandler; -import com.ksyun.ks3.services.handler.DeleteBucketReplicationConfigResponceHandler; -import com.ksyun.ks3.services.handler.DeleteBucketResponceHandler; -import com.ksyun.ks3.services.handler.DeleteObjectRequestHandler; -import com.ksyun.ks3.services.handler.GetBucketACLResponceHandler; -import com.ksyun.ks3.services.handler.GetBucketPolicyResponceHandler; -import com.ksyun.ks3.services.handler.GetBucketQuotaResponceHandler; -import com.ksyun.ks3.services.handler.GetBucketReplicationConfigResponceHandler; +import com.ksyun.ks3.services.handler.CreateBucketResponseHandler; +import com.ksyun.ks3.services.handler.DeleteBucketPolicyResponseHandler; +import com.ksyun.ks3.services.handler.DeleteBucketQuotaResponseHandler; +import com.ksyun.ks3.services.handler.DeleteBucketReplicationResponseHandler; +import com.ksyun.ks3.services.handler.DeleteBucketResponseHandler; +import com.ksyun.ks3.services.handler.DeleteObjectResponseHandler; +import com.ksyun.ks3.services.handler.DeleteObjectTaggingResponseHandler; +import com.ksyun.ks3.services.handler.GetBucketACLResponseHandler; +import com.ksyun.ks3.services.handler.GetBucketPolicyResponseHandler; +import com.ksyun.ks3.services.handler.GetBucketQuotaResponseHandler; +import com.ksyun.ks3.services.handler.GetBucketReplicationResponseHandler; import com.ksyun.ks3.services.handler.GetObjectACLResponseHandler; +import com.ksyun.ks3.services.handler.GetObjectAdpResponseHandler; +import com.ksyun.ks3.services.handler.GetObjectResponseHandler; import com.ksyun.ks3.services.handler.GetObjectTaggingResponseHandler; import com.ksyun.ks3.services.handler.HeadBucketResponseHandler; import com.ksyun.ks3.services.handler.HeadObjectResponseHandler; -import com.ksyun.ks3.services.handler.Ks3HttpResponceHandler; -import com.ksyun.ks3.services.handler.ListBucketsResponceHandler; +import com.ksyun.ks3.services.handler.InitiateMultipartUploadResponseHandler; +import com.ksyun.ks3.services.handler.ListBucketsResponseHandler; import com.ksyun.ks3.services.handler.ListObjectsResponseHandler; import com.ksyun.ks3.services.handler.ListPartsResponseHandler; import com.ksyun.ks3.services.handler.PutBucketACLResponseHandler; -import com.ksyun.ks3.services.handler.PutBucketReplicationResponceHandler; +import com.ksyun.ks3.services.handler.PutBucketPolicyResponseHandler; +import com.ksyun.ks3.services.handler.PutBucketQuotaResponseHandler; +import com.ksyun.ks3.services.handler.PutBucketReplicationResponseHandler; import com.ksyun.ks3.services.handler.PutObjectACLResponseHandler; -import com.ksyun.ks3.services.handler.PutObjectAdpResponceHandler; +import com.ksyun.ks3.services.handler.PutObjectAdpResponseHandler; import com.ksyun.ks3.services.handler.PutObjectFetchResponseHandler; import com.ksyun.ks3.services.handler.PutObjectResponseHandler; +import com.ksyun.ks3.services.handler.PutObjectTaggingResponseHandler; +import com.ksyun.ks3.services.handler.UploadPartResponseHandler; +import com.ksyun.ks3.services.request.AbortMultipartUploadRequest; +import com.ksyun.ks3.services.request.CompleteMultipartUploadRequest; import com.ksyun.ks3.services.request.CopyObjectRequest; +import com.ksyun.ks3.services.request.CreateBucketRequest; import com.ksyun.ks3.services.request.DeleteBucketPolicyRequest; -import com.ksyun.ks3.services.request.DeleteBucketReplicationConfigRequest; +import com.ksyun.ks3.services.request.DeleteBucketQuotaRequest; +import com.ksyun.ks3.services.request.DeleteBucketReplicationRequest; +import com.ksyun.ks3.services.request.DeleteBucketRequest; import com.ksyun.ks3.services.request.DeleteObjectRequest; +import com.ksyun.ks3.services.request.GetBucketACLRequest; import com.ksyun.ks3.services.request.GetBucketPolicyRequest; import com.ksyun.ks3.services.request.GetBucketQuotaRequest; -import com.ksyun.ks3.services.request.GetBucketReplicationConfigRequest; +import com.ksyun.ks3.services.request.GetBucketReplicationRequest; +import com.ksyun.ks3.services.request.GetObjectACLRequest; +import com.ksyun.ks3.services.request.GetObjectRequest; +import com.ksyun.ks3.services.request.HeadBucketRequest; +import com.ksyun.ks3.services.request.HeadObjectRequest; +import com.ksyun.ks3.services.request.InitiateMultipartUploadRequest; +import com.ksyun.ks3.services.request.ListBucketsRequest; import com.ksyun.ks3.services.request.ListObjectsRequest; -import com.ksyun.ks3.services.request.PutBuckePolicyRequest; -import com.ksyun.ks3.services.request.PutBuckeQuotaRequest; +import com.ksyun.ks3.services.request.ListPartsRequest; +import com.ksyun.ks3.services.request.PutBucketPolicyRequest; import com.ksyun.ks3.services.request.PutBucketACLRequest; -import com.ksyun.ks3.services.request.PutBucketReplicationConfigRequest; +import com.ksyun.ks3.services.request.PutBucketQuotaRequest; +import com.ksyun.ks3.services.request.PutBucketReplicationRequest; import com.ksyun.ks3.services.request.PutObjectACLRequest; import com.ksyun.ks3.services.request.PutObjectRequest; +import com.ksyun.ks3.services.request.PutObjectFetchRequest; +import com.ksyun.ks3.services.request.UploadPartRequest; import com.ksyun.ks3.services.request.adp.Adp; -import com.ksyun.ks3.services.request.adp.PutAdpRequest; -import com.ksyun.ks3.services.request.object.PutObjectFetchRequest; -import com.ksyun.ks3.services.request.object.PutObjectFetchResult; +import com.ksyun.ks3.services.request.adp.GetObjectAdpRequest; +import com.ksyun.ks3.services.request.adp.PutObjectAdpRequest; import com.ksyun.ks3.services.request.tag.DeleteObjectTaggingRequest; import com.ksyun.ks3.services.request.tag.GetObjectTaggingRequest; import com.ksyun.ks3.services.request.tag.ObjectTagging; @@ -96,6 +153,7 @@ import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; @@ -103,11 +161,11 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import cz.msebera.android.httpclient.Header; +import okhttp3.Headers; /** * 包含一系列资源管理操作Api使用示例 @@ -134,15 +192,26 @@ public class MainActivity extends AppCompatActivity { public static final int LIST_OBJECTS = 12; public static final int COPY_OBJECT = 17; public static final int PUT_OBJECT_ADP = 21; - public static final int PUT_OBJECT_TAG = 22; public static final int FETCH_OBJECT = 23; public static final int POST_OBJECT = 24; + public static final int GET_BUCKET_POLICY = 25; + public static final int DELETE_BUCKET_POLICY = 26; + public static final int GET_BUCKET_CRR = 27; + public static final int DELETE_BUCKET_CRR = 28; + // Upload public static final int UPLOAD = 13; // Download public static final int DOWNLOAD = 14; public static final int LIST_PART = 15; public static final int MultiPartUpload = 16; + public static final int GET_OBJECT_ASYNC = 29; + public static final int MULTI_UPLOAD = 30; + public static final int MULTI_UPLOAD_EXAMPLE = 31; + public static final int PUT_OBJECT_TAG = 32; + public static final int GET_OBJECT_TAG = 33; + public static final int DELETE_OBJECT_TAG = 34; + public static final int PUT_OBJECT_SYNC = 35; private static final String API = "api"; private static final String RESULT = "result"; private Ks3ClientConfiguration configuration; @@ -155,6 +224,8 @@ public class MainActivity extends AppCompatActivity { private BucketObjectInpuDialog bucketObjectInpuDialog; private BucketCopyObjectInpuDialog bucketCopyObjectInpuDialog; + private Map viewListData; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -174,11 +245,14 @@ public class MainActivity extends AppCompatActivity { }).request(); } - public static void main(String[] args) { - -// Ks3Client client = Ks3ClientFactory.getDefaultClient(this); -// Ks3ClientConfiguration configuration2 = Ks3ClientConfiguration.getDefaultConfiguration(); -// configuration2.setPathStyleAccess(false); + private Map getViewListData(String[] source) { + HashMap result = new LinkedHashMap<>(); + if (source.length <= 0) return result; + for (String str : source) { + String[] split = str.split(":"); + result.put(split[0], new Integer(split[1])); + } + return result; } private void setUpUserInterface() { @@ -187,13 +261,18 @@ public class MainActivity extends AppCompatActivity { bucketObjectInpuDialog = new BucketObjectInpuDialog(MainActivity.this); commandList = (ListView) findViewById(R.id.command_list); command_array = getResources().getStringArray(R.array.command_array); + viewListData = getViewListData(command_array); commandList.setAdapter(new ArrayAdapter(this, - android.R.layout.simple_list_item_1, command_array)); + android.R.layout.simple_list_item_1, viewListData.keySet().toArray(new String[viewListData.keySet().size()]))); commandList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { - switch (position) { + TextView view = (TextView) arg1; + String text = (String) view.getText(); + Integer pos = viewListData.get(text); + System.out.println("开始执行: " + text + " 位置:" + pos); + switch (pos) { case UPLOAD: Intent intent_upload = new Intent(MainActivity.this, UploadActivity.class); @@ -229,7 +308,7 @@ public class MainActivity extends AppCompatActivity { headObject(); break; case PUT_OBJECT: - putObjectSync(); + putObject(); break; case DELETE_OBJECT: deleteObject(); @@ -243,8 +322,11 @@ public class MainActivity extends AppCompatActivity { case LIST_OBJECTS: listObjects(); break; - case LIST_PART: - listParts(); + case MULTI_UPLOAD: + multipartUpload(); + break; + case MULTI_UPLOAD_EXAMPLE: + multipartUploadExample(); break; case MultiPartUpload: Intent multi_upload = new Intent(MainActivity.this, @@ -255,35 +337,52 @@ public class MainActivity extends AppCompatActivity { copyObject(); break; case PUT_BUCKET_CRR: - // getBucketCrr(); - // deleteBucketCrr(); putBucketCrr(); break; + case GET_BUCKET_CRR: + getBucketCrr(); + break; + case DELETE_BUCKET_CRR: + deleteBucketCrr(); + break; case PUT_BUCKET_QUOTA: putBucketQuota(); getBucketQuota(); + deleteBucketQuota(); break; case PUT_BUCKET_POLICY: putBucketPolicy(); break; + case GET_BUCKET_POLICY: + getBucketPolicy(); + break; + case DELETE_BUCKET_POLICY: + deleteBucketPolicy(); + break; case PUT_OBJECT_ADP: testPutAndQueryAdp(); break; - case PUT_OBJECT_TAG: - testPutObjTag(); - break; case FETCH_OBJECT: - testPutFetchObj(); + putObjectFetch(); break; case POST_OBJECT: - new Thread(new Runnable() { - @Override - public void run() { - postObject(); - } - }).start(); + postObject(); + break; + case GET_OBJECT_ASYNC: + getObjectAsync(); + break; + case PUT_OBJECT_TAG: + putObjectTag(); + break; + case GET_OBJECT_TAG: + getObjectTag(); + break; + case DELETE_OBJECT_TAG: + deleteObjectTag(); + break; + case PUT_OBJECT_SYNC: + putObjectSync(); break; - default: break; } @@ -293,275 +392,149 @@ public class MainActivity extends AppCompatActivity { } private void copyObject() { - ObjectTagging objectTagging = new ObjectTagging(); - objectTagging.addObjectTag("tagA", "b"); - objectTagging.setTaggingDirective("Replace"); - - CopyObjectRequest copyObjectRequest = new CopyObjectRequest(SRC_BUCKETNAME, "ZZZb", SRC_BUCKETNAME, SRC_OBJECTKEY, objectTagging); + final String apiName = "Copy Object"; + CopyObjectRequest copyObjectRequest = new CopyObjectRequest(DST_BUCKETNAME, DST_OBJECTKEY, SRC_BUCKETNAME, SRC_OBJECTKEY); client.copyObject(copyObjectRequest, new CopyObjectResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - System.out.println("fail copyObjectResponse is " + new String(response)); + public void onFailure(CopyObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, CopyResult result) { - System.out.println("success copyObjectResponse is " + result.toString()); + public void onSuccess(CopyObjectRequest request, CopyObjectResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } }); } private void putObject() { - final File file = new File(Constants.TEST_MULTIUPLOAD_FILE); - + final String apiName = "Put Object"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { - client.putObject(name, key, file, - new PutObjectResponseHandler() { - - @Override - public void onTaskSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "upload file success,file = " - + Constants.TEST_IMG - + ",states code = " - + statesCode).append( - "\n"); - - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, "put object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putObject--onTaskSuccess---" + stringBuffer.toString()); - - } - - @Override - public void onTaskStart() { - Log.e("tag", "putObject--onTaskStart---"); - } - - @Override - public void onTaskFinish() { - Log.e("tag", "putObject--onTaskFinish---"); - } - - @Override - public void onTaskProgress(double progress) { - Log.e("tag", "putObject--onTaskProgress---" + progress); - } - - @Override - public void onTaskCancel() { - // TODO Auto-generated method stub - - } - - @Override - public void onTaskFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "upload file failure,file = " - + Constants.TEST_IMG - + ",states code = " - + statesCode).append( - "\n").append("response:").append(response); - Log.e("tag", "putObject--onTaskFailure---" + stringBuffer.toString()); - - } - }); - } - }); - bucketObjectInpuDialog.show(); + File file = new File(Constants.TEST_MULTIUPLOAD_FILE); + PutObjectRequest request = new PutObjectRequest(name, key, file); + client.putObject(request, new PutObjectResponseHandler() { + @Override + public void onTaskSuccess(PutObjectRequest request, PutObjectResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - } + @Override + public void onTaskProgress(double progress) { + Log.d(apiName, " ---onTaskProgress---" + progress); + } + @Override + public void onTaskCancel() { + ToastUtils.showShort("任务取消"); + } - private void putObjectSync () { - final File file = new File(Constants.TEST_MULTIUPLOAD_FILE); - bucketObjectInpuDialog - .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { - @Override - public void confirmBucketAndObject(String name, String key) { - final PutObjectRequest request = new PutObjectRequest(name, key, file); - new Thread(){ @Override - public void run() { - Looper.prepare(); - client.putObject(request, new PutObjectResponseHandler() { - - @Override - public void onTaskSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "upload file success,file = " - + Constants.TEST_IMG - + ",states code = " - + statesCode).append( - "\n"); - - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, "put object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putObject--onTaskSuccess---" + stringBuffer.toString()); - - } - - @Override - public void onTaskStart() { - Log.e("tag", "putObject--onTaskStart---"); - } - - @Override - public void onTaskFinish() { - Log.e("tag", "putObject--onTaskFinish---"); - } - - @Override - public void onTaskProgress(double progress) { - Log.e("tag", "putObject--onTaskProgress---" + progress); - } - - @Override - public void onTaskCancel() { - // TODO Auto-generated method stub - - } - - @Override - public void onTaskFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "upload file failure,file = " - + Constants.TEST_IMG - + ",states code = " - + statesCode).append( - "\n").append("response:").append(response); - Log.e("tag", "putObject--onTaskFailure---" + stringBuffer.toString()); - - } - }, false); - Looper.loop(); + public void onTaskFailure(PutObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } - }.start(); + }); } }); bucketObjectInpuDialog.show(); + } - protected void listParts() { + + private void putObjectSync() { + final String apiName = "Put Object Sync"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { + File file = new File(Constants.TEST_MULTIUPLOAD_FILE); + final PutObjectRequest request = new PutObjectRequest(name, key, file); + new Thread(new Runnable() { + @Override + public void run() { + try { + PutObjectResult result = client.syncPutObject(request); + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } catch (Ks3ClientException e) { + String resultStr = exceptionHandler(apiName, e, null); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } catch (Ks3ServiceException e) { + String resultStr = exceptionHandler(apiName, null, e); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } - client.listParts(name, key, Constants.UPLOAD_ID, - new ListPartsResponseHandler() { - - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - ListPartsResult listPartsResult) { - Log.e("tag", "listParts--onSuccess---" + statesCode); - } - - @Override - public void onFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - // TODO Auto-generated method stub - Log.e("tag", "listParts--onFailure---" + statesCode); - - } - }); + } + }).start(); } }); bucketObjectInpuDialog.show(); - } private void setUpKs3Client() { // AK&SK形式直接初始化,仅建议测试时使用,正式环境下请替换AuthListener方式 -// client = new Ks3Client(Constants.ACCESS_KEY__ID, -// Constants.ACCESS_KEY_SECRET, MainActivity.this); -// client.setEndpoint("ks3-cn-beijing.ksyuncs.com"); -// client.setConfiguration(configuration); -// - Authorization authorization = new Authorization(Constants.ACCESS_KEY__ID, Constants.ACCESS_KEY_SECRET); - client = new Ks3Client(authorization, this); -// client = Ks3ClientFactory.getDefaultClient(this); + client = new Ks3Client(Constants.ACCESS_KEY__ID, + Constants.ACCESS_KEY_SECRET, MainActivity.this); configuration = Ks3ClientConfiguration.getDefaultConfiguration(); + configuration.setPathStyleAccess(false); + configuration.setSocketTimeout(10000); + client.setEndpoint("ks3-cn-beijing.ksyuncs.com"); client.setConfiguration(configuration); - client.setEndpoint(Constants.END_POINT); + +// Authorization authorization = new Authorization(Constants.ACCESS_KEY__ID, Constants.ACCESS_KEY_SECRET); +// client = new Ks3Client(authorization, this); +// client = Ks3ClientFactory.getDefaultClient(this); +// client.setConfiguration(configuration); +// client.setEndpoint(Constants.END_POINT); // configuration.setPathStyleAccess(true); // AuthListener方式初始化 - // client = new Ks3Client(new AuthListener() { - // @Override - // public String onCalculateAuth(final String httpMethod, - // final String ContentType, final String Date, - // final String ContentMD5, final String Resource, - // final String Headers) { - // // 此处应由APP端向业务服务器发送post请求返回Token。 - // // 需要注意该回调方法运行在非主线程 - // // 此处内部写法仅为示例,开发者请根据自身情况修改 - // StringBuffer result = new StringBuffer(); - // HttpPost request = new HttpPost(Constants.APP_SERTVER_HOST); - // StringEntity se; - // try { - // JSONObject object = new JSONObject(); - // object.put("http_method", httpMethod.toString()); - // object.put("content_type", ContentType); - // object.put("date", Date); - // object.put("content_md5", ContentMD5); - // object.put("resource", Resource); - // object.put("headers", Headers); - // se = new StringEntity(object.toString()); - // request.setEntity(se); - // HttpResponse httpResponse = new DefaultHttpClient().execute(request); - // String retSrc = EntityUtils.toString(httpResponse - // .getEntity()); - // result.append(retSrc); - // } catch (JSONException e) { - // e.printStackTrace(); - // } catch (UnsupportedEncodingException e) { - // e.printStackTrace(); - // } catch (ClientProtocolException e) { - // e.printStackTrace(); - // } catch (IOException e) { - // e.printStackTrace(); - // } - // return result.toString(); - // } - // }, MainActivity.this); - // client.setConfiguration(configuration); +// client = new Ks3Client(new AuthListener() { +// @Override +// public String onCalculateAuth(final String httpMethod, +// final String ContentType, final String Date, +// final String ContentMD5, final String Resource, +// final String Headers) { +// // 此处应由APP端向业务服务器发送post请求返回Token。 +// // 需要注意该回调方法运行在非主线程 +// // 此处内部写法仅为示例,开发者请根据自身情况修改 +// String result = ""; +// try { +// OkHttpClient client = new OkHttpClient().newBuilder().build(); +// MediaType type = MediaType.parse("application/json"); +// JSONObject object = new JSONObject(); +// object.put("http_method", httpMethod.toString()); +// object.put("content_type", ContentType); +// object.put("date", Date); +// object.put("content_md5", ContentMD5); +// object.put("resource", Resource); +// object.put("headers", Headers); +// RequestBody body = RequestBody.create(type, object.toString()); +// Request request = new Request.Builder().url("http://10.231.135.222:8000/").method("POST", body) +// .addHeader("Content-Type","application/json").build(); +// Response response = client.newCall(request).execute(); +// result = response.body().string(); +// } catch (Exception e) { +// Log.e(apiName, "onCalculateAuth error:" + e.toString()); +// } +// Log.d("tag", "onCalculateAuth from server result:" + result); +// return result; +// } +// }, MainActivity.this); +// client.setEndpoint(Constants.END_POINT); +// client.setConfiguration(configuration); } @@ -572,200 +545,79 @@ public class MainActivity extends AppCompatActivity { } private void headObject() { + final String apiName = "Head Object"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { - client.headObject(name, key, - new HeadObjectResponseHandler() { - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - HeadObjectResult headObjectResult) { - - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("lastModifiedDate = " - + headObjectResult - .getLastmodified()) - .append("\n"); - stringBuffer.append("ETag = " - + headObjectResult - .getETag()) - .append("\n"); - ObjectMetadata metadata = headObjectResult - .getObjectMetadata(); - stringBuffer.append(metadata); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - - Bundle data = new Bundle(); - data.putString(RESULT, headObjectResult.toString()); - data.putString(API, "head object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "headObject--onSuccess---" + headObjectResult.toString()); - } - - @Override - public void onFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "head object , states code :" - + statesCode).append( - "\n"); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "head object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "headObject--onFailure---" + stringBuffer.toString()); - } - }); + HeadObjectRequest request = new HeadObjectRequest(name, key); + client.headObject(request, new HeadObjectResponseHandler() { + @Override + public void onSuccess(HeadObjectRequest request, HeadObjectResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + @Override + public void onFailure(HeadObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); } }); bucketObjectInpuDialog.show(); } private void getObjectACL() { + final String apiName = "Get Object ACL"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { - client.getObjectACL(name, key, - new GetObjectACLResponseHandler() { - - @Override - public void onSuccess( - int statesCode, - Header[] responceHeaders, - AccessControlPolicy accessControlPolicy) { - StringBuffer stringBuffer = new StringBuffer(); - Owner owner = accessControlPolicy - .getOwner(); - stringBuffer - .append("=======Owner : ID " - + owner.getId() - + " ; NAME :" - + owner.getDisplayName()) - .append("\n"); - stringBuffer - .append("==============ACL LIST========="); - HashSet grants = accessControlPolicy - .getAccessControlList() - .getGrants(); - for (Grant grant : grants) { - stringBuffer - .append(grant.getGrantee() - .getIdentifier() - + "========>" - + grant.getPermission() - .toString()) - .append("\n"); - } - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "head object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getObjectACL--onSuccess---" + stringBuffer.toString()); - - - } - - @Override - public void onFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "get object ACL FAIL !!!!!!, states code :" - + statesCode).append( - "\n").append("response:").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "GET Object ACL Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getObjectACL--onFailure---" + stringBuffer.toString()); - - } - }); + GetObjectACLRequest request = new GetObjectACLRequest(name, key); + client.getObjectACL(request, new GetObjectACLResponseHandler() { + @Override + public void onSuccess(GetObjectACLRequest request, GetObjectACLResult result) { + String resultStr = resultHandler(apiName, result, result.getAccessControlPolicy().toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + @Override + public void onFailure(GetObjectACLRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); } }); bucketObjectInpuDialog.show(); } private void deleteBucket() { + final String apiName = "Delete Bucket"; + bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { - client.deleteBucket(name, new DeleteBucketResponceHandler() { - + DeleteBucketRequest request = new DeleteBucketRequest(name); + client.deleteBucket(request, new DeleteBucketResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("Delete bucket success , states code :" - + statesCode); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "Delete Bucket Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "deleteBucket--onSuccess---" + stringBuffer.toString()); - + public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("Delete bucket failed , states code :" - + statesCode).append("/n").append("responce:").append(response); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "Delete Bucket Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "deleteBucket--onFailure---" + stringBuffer.toString()); + public void onFailure(DeleteBucketRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -774,123 +626,63 @@ public class MainActivity extends AppCompatActivity { } private void putObjectACL() { + final String apiName = "Put Object ACL"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { - PutObjectACLRequest request = new PutObjectACLRequest( - name, key); - CannedAccessControlList cannedList = CannedAccessControlList.PublicRead; - // AccessControlList acList = new AccessControlList(); - - // GranteeId grantee = new GranteeId(); - // grantee.setIdentifier("123456"); - // grantee.setDisplayName("TESTTEST1"); - // acList.addGrant(grantee, Permission.Read); - // GranteeId grantee1 = new GranteeId(); - // grantee1.setIdentifier("1235789"); - // grantee1.setDisplayName("TESTTEST1"); - // acList.addGrant(grantee1, Permission.FullControl); - // - // request.setAccessControlList(acList); - request.setCannedAcl(cannedList); - - client.putObjectACL(request, - new PutObjectACLResponseHandler() { - - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("Put Object ACL success , states code :" - + statesCode); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "Put Object ACL Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putObjectACL--onSuccess---" + stringBuffer.toString()); - } - - @Override - public void onFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "PUT Object ACL FAIL !!!!!!!!!, states code :" - + statesCode).append( - "\n").append("responce:").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "PUT Object ACL Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putObjectACL--onFailure---" + stringBuffer.toString()); - } - }); + PutObjectACLRequest request = new PutObjectACLRequest(name, key); + request.setCannedAcl(CannedAccessControlList.PublicRead); +// 当然也可以自行配置相关参数 +// AccessControlList acList = new AccessControlList(); +// GranteeId grantee = new GranteeId(); +// grantee.setIdentifier("123456"); +// grantee.setDisplayName("TESTTEST1"); +// acList.addGrant(grantee, Permission.Read); +// GranteeId grantee1 = new GranteeId(); +// grantee1.setIdentifier("1235789"); +// grantee1.setDisplayName("TESTTEST1"); +// acList.addGrant(grantee1, Permission.FullControl); +// request.setAccessControlList(acList); + client.putObjectACL(request, new PutObjectACLResponseHandler() { + @Override + public void onSuccess(PutObjectACLRequest request, PutObjectACLResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + + @Override + public void onFailure(PutObjectACLRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); } }); bucketObjectInpuDialog.show(); } private void headBucket() { + final String apiName = "Head Bucket"; bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { - client.headBucket(name, new HeadBucketResponseHandler() { + HeadBucketRequest request = new HeadBucketRequest(name); + client.headBucket(request, new HeadBucketResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("head Bucket success , states code :" - + statesCode); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "head Bucket Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "headBucket--onSuccess---" + stringBuffer.toString()); - + public void onSuccess(HeadBucketRequest request, HeadBucketResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "head Bucket Fail, states code :" + statesCode) - .append("\n").append("response:").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "head Bucket Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "headBucket--onFailure---" + stringBuffer.toString()); + public void onFailure(HeadBucketRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -899,6 +691,7 @@ public class MainActivity extends AppCompatActivity { } private void putBucketACL() { + final String apiName = "Put Bucket ACL"; bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { @@ -930,49 +723,20 @@ public class MainActivity extends AppCompatActivity { // acl.addGrant(grantee1, Permission.Write); // request.setAccessControlList(acl) ; - - CannedAccessControlList cannedAcl = CannedAccessControlList.PublicReadWrite; - request.setCannedAcl(cannedAcl); - // request.setAccessControlList(acl); + request.setCannedAcl(CannedAccessControlList.PublicRead); client.putBucketACL(request, new PutBucketACLResponseHandler() { - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("Put Bucket ACL success, states code :" - + statesCode); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "Put Bucket ACL Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "putBucketACL--onSuccess---" + stringBuffer.toString()); + public void onSuccess(PutBucketACLRequest request, PutBucketACLResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "PUT Bucket ACL FAIL, states code :" - + statesCode).append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "PUT Bucket ACL Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "putBucketACL--onFailure---" + stringBuffer.toString()); + public void onFailure(PutBucketACLRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -982,132 +746,61 @@ public class MainActivity extends AppCompatActivity { } private void getBucketACL() { + final String apiName = "Get Bucket ACL"; bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { - client.getBucketACL(name, new GetBucketACLResponceHandler() { - + GetBucketACLRequest request = new GetBucketACLRequest(name); + client.getBucketACL(request, new GetBucketACLResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - AccessControlPolicy accessControlPolicy) { - StringBuffer stringBuffer = new StringBuffer(); - Owner owner = accessControlPolicy.getOwner(); - stringBuffer.append( - "=======Owner : ID " + owner.getId() - + " ; NAME :" + owner.getDisplayName()) - .append("\n"); - stringBuffer.append("==============ACL LIST========="); - HashSet grants = accessControlPolicy - .getAccessControlList().getGrants(); - for (Grant grant : grants) { - stringBuffer.append( - grant.getGrantee().getIdentifier() - + "========>" - + grant.getPermission().toString()) - .append("\n"); - } - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "GET BUCKET ACL Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "getBucketACL--onSuccess---" + stringBuffer.toString()); + public void onSuccess(GetBucketACLRequest request, GetBucketACLResult result) { + String resultStr = resultHandler(apiName, result, result.getAccessControlPolicy().toString()); + resultStr += result.getAccessControlPolicy().toString(); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "GET BUCKET ACL fail , states code :" - + statesCode).append("\n").append("response = ").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "GET BUCKET ACL Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "getBucketACL--onFailure---" + stringBuffer.toString()); + public void onFailure(GetBucketACLRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } }); bucketInpuDialog.show(); - } private void deleteObject() { + final String apiName = "Delete Object"; bucketObjectInpuDialog .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { @Override public void confirmBucketAndObject(String name, String key) { - DeleteObjectRequest request = new DeleteObjectRequest( - name, key); - client.deleteObject(request, - new DeleteObjectRequestHandler() { - - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer - .append("Delete success , states code :" - + statesCode); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "Delete Object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "deleteObject--onSuccess---" + stringBuffer.toString()); - } - - @Override - public void onFailure(int statesCode, - Ks3Error error, - Header[] responceHeaders, - String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "Delete fail , states code :" - + statesCode).append( - "\n").append("response:").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent( - MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, - stringBuffer.toString()); - data.putString(API, - "Delete Object Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "deleteObject--onFailure---" + stringBuffer.toString()); - } - }); + DeleteObjectRequest request = new DeleteObjectRequest(name, key); + client.deleteObject(request, new DeleteObjectResponseHandler() { + @Override + public void onSuccess(DeleteObjectRequest request, DeleteObjectResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + + @Override + public void onFailure(DeleteObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); } }); bucketObjectInpuDialog.show(); - } private void listObjects() { + final String apiName = "List Objects"; bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { @@ -1115,183 +808,77 @@ public class MainActivity extends AppCompatActivity { // request.setPrefix("android_test/"); // request.setDelimiter("/"); client.listObjects(request, new ListObjectsResponseHandler() { - @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - ObjectListing objectListing) { - //StirngBuffer过长 oppo会报:android oppo msg's executing time is too longcopy - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "name = " + objectListing.getBucketName()) - .append("\n"); - stringBuffer.append( - "Prefix = " + objectListing.getPrefix()) - .append("\n"); - stringBuffer.append( - "Marker = " + objectListing.getMarker()) - .append("\n"); - stringBuffer.append( - "Delimiter = " + objectListing.getDelimiter()) - .append("\n"); - stringBuffer.append( - "IsTruncated = " + objectListing.isTruncated()) - .append("\n"); - List objectSummaries = objectListing - .getObjectSummaries(); - Ks3ObjectSummary objectSummary = null; - Owner owner = null; - for (int i = 0; i < objectSummaries.size(); i++) { - objectSummary = objectSummaries.get(i); - owner = objectSummary.getOwner(); - stringBuffer.append( - "================Object :" + i - + " ===================").append( - "\n"); - stringBuffer.append( - " key =" - + objectSummary.getKey()).append( - "\n"); -// stringBuffer.append( -// " LastModified =" -// + objectSummary.getLastModified()) -// .append("\n"); -// stringBuffer.append( -// " ETag =" + objectSummary.getETag()) -// .append("\n"); - stringBuffer.append( - " Size =" + objectSummary.getSize()) - .append("\n"); - stringBuffer.append( - " owner.ID =" + owner.getId()) - .append("\n"); -// stringBuffer.append( -// " Size.displayName =" -// + owner.getDisplayName()).append( -// "\n"); -// stringBuffer.append( -// " StorageClass = " -// + objectSummary.getStorageClass()) -// .append("\n"); - } - - List commonPrefixes = objectListing - .getCommonPrefixes(); - for (int i = 0; i < commonPrefixes.size(); i++) { - stringBuffer.append( - " commonPrefixes =>" + i + "=" - + objectSummary.getStorageClass()) - .append("\n"); + public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { + //StringBuffer过长 oppo会报:android oppo msg's executing time is too longcopy + ObjectListing objectListing = result.getObjectListing(); + StringBuilder stringBuilder = new StringBuilder(); + List objectSummaries = objectListing.getObjectSummaries(); + for (int i = 0; i < objectListing.getObjectSummaries().size(); i++) { + stringBuilder.append(objectSummaries.get(i).getKey()).append("\n"); } - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "RESULT for ListObjects"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "listObjects--onSuccess---" + stringBuffer.toString()); + String resultStr = resultHandler(apiName, result, stringBuilder.toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - // TODO Auto-generated method stub - Log.e("tag", "listObjects--onFailure---" + statesCode); + public void onFailure(ListObjectsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } }); bucketInpuDialog.show(); - } private void listBuckets() { - client.listBuckets(new ListBucketsResponceHandler() { + final String apiName = "List Buckets"; + ListBucketsRequest request = new ListBucketsRequest(); + client.listBuckets(request, new ListBucketsResponseHandler() { @Override - public void onSuccess(int paramInt, Header[] paramArrayOfHeader, - ArrayList resultList) { - StringBuffer stringBuffer = new StringBuffer(); - for (Bucket bucket : resultList) { - stringBuffer.append(bucket.getName()).append("\n"); -// stringBuffer.append(bucket.getCreationDate()).append("\n"); -// stringBuffer.append(bucket.getOwner().getDisplayName()) -// .append("\n"); -// stringBuffer.append(bucket.getOwner().getId()).append("\n"); + public void onSuccess(ListBucketsRequest request, ListBucketsResult result) { + List buckets = result.getBuckets(); + StringBuilder stringBuilder = new StringBuilder(); + for (Bucket bucket : buckets) { + stringBuilder.append(bucket.getName()).append("\n"); } - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "List Bucket Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "listBuckets--onSuccess:" + stringBuffer.toString()); + String resultStr = resultHandler(apiName, result, stringBuilder.toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "list bucket fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "List Buckets"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "listBuckets--onFailure:" + stringBuffer.toString()); + public void onFailure(ListBucketsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } private void createBucket() { + final String apiName = "Create Bucket"; bucketInpuDialog.setOnBucketInputListener(new OnBucketDialogListener() { @Override public void confirmBucket(String name) { - client.createBucket(name, new CreateBucketResponceHandler() { + CreateBucketRequest request = new CreateBucketRequest(name); + request.setCannedAcl(CannedAccessControlList.Private); + client.createBucket(request, new CreateBucketResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, "success"); - data.putString(API, "Create Bucket Result"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "createBucket--onSuccess---" + "statesCode:" + statesCode); + public void onSuccess(CreateBucketRequest request, CreateBucketResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "Delete fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "List Buckets"); - intent.putExtras(data); - startActivity(intent); - - Log.e("tag", "createBucket--onFailure:" + stringBuffer.toString()); + public void onFailure(CreateBucketRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1300,87 +887,49 @@ public class MainActivity extends AppCompatActivity { } private void putBucketCrr() { - + final String apiName = "Put Bucket Crr"; //设置规则 ReplicationRule rule = new ReplicationRule(); List prefixList = new ArrayList(); prefixList.add("test"); rule.setPrefixList(prefixList); - rule.setTargetBucket("qichao-bja"); - rule.setRegion("BJA"); + rule.setTargetBucket(SRC_BUCKETNAME); + rule.setRegion("BEIJING"); rule.setDeleteMarkerStatus(false); - - client.putBucketCrr(new PutBucketReplicationConfigRequest("cqc-test-b", rule), new PutBucketReplicationResponceHandler() { + PutBucketReplicationRequest request = new PutBucketReplicationRequest(SRC_BUCKETNAME, rule); + client.putBucketCrr(request, new PutBucketReplicationResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, "success"); - data.putString(API, "PutBucketCRR Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "PutBucketCRR--onSuccess---" + "statesCode:" + statesCode); - // deleteBucketCrr(); + public void onSuccess(PutBucketReplicationRequest request, PutBucketReplicationResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "putBucketCrr fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "PutBucketCRR"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "PutBucketCRR--onFailure:" + stringBuffer.toString()); + public void onFailure(PutBucketReplicationRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } private void getBucketCrr() { - - //获取规则 - client.getBucketCrr(new GetBucketReplicationConfigRequest("jiangrantest"), new GetBucketReplicationConfigResponceHandler() { + final String apiName = "Get Bucket Crr"; + GetBucketReplicationRequest request = new GetBucketReplicationRequest(SRC_BUCKETNAME); + client.getBucketCrr(request, new GetBucketReplicationResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "getBucketCrr fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "getBucketCRR"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getBucketCRR--onFailure:" + stringBuffer.toString()); + public void onSuccess(GetBucketReplicationRequest request, GetBucketReplicationResult result) { + String resultStr = resultHandler(apiName, result, result.getReplicationRule().toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, ReplicationRule replicationRule) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, "success" + "/n" + replicationRule.toString()); - data.putString(API, "getBucketCRR Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getBucketCRR--onSuccess---" + "statesCode:" + statesCode); + public void onFailure(GetBucketReplicationRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1389,39 +938,21 @@ public class MainActivity extends AppCompatActivity { * 删除跨区域复制规则 */ private void deleteBucketCrr() { - - //获取规则 - client.deleteBucketCrr(new DeleteBucketReplicationConfigRequest("jiangrantest"), new DeleteBucketReplicationConfigResponceHandler() { + final String apiName = "Delete Bucket Crr"; + DeleteBucketReplicationRequest request = new DeleteBucketReplicationRequest(SRC_BUCKETNAME); + client.deleteBucketCrr(request, new DeleteBucketReplicationResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "deleteBucketCrr fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "deleteBucketCrr"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "deleteBucketCrr--onFailure:" + stringBuffer.toString()); + public void onSuccess(DeleteBucketReplicationRequest request, DeleteBucketReplicationResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders) { - - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(API, "deleteBucketCrr Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "deleteBucketCrr--onSuccess---" + "statesCode:" + statesCode); + public void onFailure(DeleteBucketReplicationRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1430,47 +961,44 @@ public class MainActivity extends AppCompatActivity { * 设置空间策略 */ private void putBucketPolicy() { - - BucketPolicyRule policyRule = new BucketPolicyRule() - .addAllAction() - .addPrincipalByAccountId("2000090561") - .addPrincipalByAccountIdAndUserName("123123", "123123") - .addBucketResource("jiangrantest") - .addConditionSouceIp("11.11.11.11", true) - .addSourceHeader("Connection: keep-alivE", BucketPolicyConditionRule.StringLike) - .addSourceHeader("Connection: keep-alivE123", BucketPolicyConditionRule.StringEquals) - .setEffect("Allow"); - - PutBuckePolicyRequest putBuckePolicyRequest = new PutBuckePolicyRequest("jiangrantest", policyRule); - client.putBucketPolicy(putBuckePolicyRequest, new Ks3HttpResponceHandler() { + final String apiName = "Put Bucket Policy"; + String policy = "{\n" + + " \"Statement\": [\n" + + " {\n" + + " \"Effect\": \"Allow\",\n" + + " \"Action\": [\n" + + " \"ks3:ListBucket\",\n" + + " \"ks3:ListBucketMultipartUploads\",\n" + + " \"ks3:GetObject\",\n" + + " \"ks3:GetObjectAcl\",\n" + + " \"ks3:ListMultipartUploadParts\"\n" + + " ],\n" + + " \"Principal\": {\n" + + " \"KSC\": [\n" + + " \"*\"\n" + + " ]\n" + + " },\n" + + " \"Resource\": [\n" + + " \"krn:ksc:ks3:::android-test\",\n" + + " \"krn:ksc:ks3:::android-test/*\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + "}"; + PutBucketPolicyRequest putBucketPolicyRequest = new PutBucketPolicyRequest(SRC_BUCKETNAME, policy); + client.putBucketPolicy(putBucketPolicyRequest, new PutBucketPolicyResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, "success"); - data.putString(API, "putBucketPolicy Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putBucketPolicy--onSuccess---" + "statesCode:" + statesCode); + public void onSuccess(PutBucketPolicyRequest request, PutBucketPolicyResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "putBucketPolicy fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + throwable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "putBucketPolicy"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putBucketPolicy--onFailure:" + stringBuffer.toString()); + public void onFailure(PutBucketPolicyRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1479,37 +1007,22 @@ public class MainActivity extends AppCompatActivity { * 获取空间策略 */ private void getBucketPolicy() { - - GetBucketPolicyRequest request = new GetBucketPolicyRequest("uptools2"); - client.getBucketPolicy(request, new GetBucketPolicyResponceHandler() { + final String apiName = "Get Bucket Policy"; + GetBucketPolicyRequest request = new GetBucketPolicyRequest(SRC_BUCKETNAME); + client.getBucketPolicy(request, new GetBucketPolicyResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "getBucketPolicy fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "getBucketPolicy"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getBucketPolicy--onFailure:" + stringBuffer.toString()); + public void onSuccess(GetBucketPolicyRequest request, GetBucketPolicyResult result) { + String policy = result.getPolicy(); + String resultStr = resultHandler(apiName, result, policy); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, String policy) { - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, "success ! policy is : " + policy); - data.putString(API, "getBucketPolicy Result"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getBucketPolicy--onSuccess---" + "statesCode:" + statesCode); + public void onFailure(GetBucketPolicyRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1518,19 +1031,22 @@ public class MainActivity extends AppCompatActivity { * 删除空间策略 */ private void deleteBucketPolicy() { - - DeleteBucketPolicyRequest request = new DeleteBucketPolicyRequest("uptools2"); - client.deleteBucketPolicy(request, new Ks3HttpResponceHandler() { + final String apiName = "Delete Bucket Policy"; + DeleteBucketPolicyRequest request = new DeleteBucketPolicyRequest(SRC_BUCKETNAME); + client.deleteBucketPolicy(request, new DeleteBucketPolicyResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { - System.out.println("onSuccess statesCode is " + statesCode); + public void onSuccess(DeleteBucketPolicyRequest request, DeleteBucketPolicyResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - System.out.println("onFailure statesCode is " + statesCode); + public void onFailure(DeleteBucketPolicyRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } - }); } @@ -1538,34 +1054,22 @@ public class MainActivity extends AppCompatActivity { * 设置桶配额 */ private void putBucketQuota() { - - //请求内容 + final String apiName = "Put Bucket Quota"; BucketQuota quota = new BucketQuota(1000000); - - PutBuckeQuotaRequest quotaRequest = new PutBuckeQuotaRequest("chenqichen", quota); - - client.putBucketQuota(quotaRequest, new Ks3HttpResponceHandler() { + PutBucketQuotaRequest request = new PutBucketQuotaRequest(SRC_BUCKETNAME, quota); + client.putBucketQuota(request, new PutBucketQuotaResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { - System.out.println("onSuccess " + new String(response)); + public void onSuccess(PutBucketQuotaRequest request, PutBucketQuotaResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "putBucketQuota fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + throwable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "putBucketQuota"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putBucketQuota--onFailure:" + stringBuffer.toString()); + public void onFailure(PutBucketQuotaRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1574,31 +1078,44 @@ public class MainActivity extends AppCompatActivity { * 获取桶配额 */ private void getBucketQuota() { + final String apiName = "Get Bucket Quota"; + GetBucketQuotaRequest request = new GetBucketQuotaRequest(SRC_BUCKETNAME); + client.getBucketQuota(request, new GetBucketQuotaResponseHandler() { + @Override + public void onSuccess(GetBucketQuotaRequest request, GetBucketQuotaResult result) { + String resultStr = resultHandler(apiName, result, result.getBucketQuota().toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - GetBucketQuotaRequest quotaRequest = new GetBucketQuotaRequest("chenqichen"); + @Override + public void onFailure(GetBucketQuotaRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); + } - client.getBucketQuota(quotaRequest, new GetBucketQuotaResponceHandler() { + /** + * 删除桶配额 + */ + private void deleteBucketQuota() { + final String apiName = "Delete Bucket Quota"; + DeleteBucketQuotaRequest request = new DeleteBucketQuotaRequest(SRC_BUCKETNAME); + client.deleteBucketQuota(request, new DeleteBucketQuotaResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "getBucketQuota fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "getBucketQuota"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "getBucketQuota--onFailure:" + stringBuffer.toString()); + public void onSuccess(DeleteBucketQuotaRequest request, DeleteBucketQuotaResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, BucketQuota quota) { - System.out.println("onSuccess storageQuota is " + quota.getStorageQuota()); + public void onFailure(DeleteBucketQuotaRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } @@ -1607,7 +1124,7 @@ public class MainActivity extends AppCompatActivity { * 音视频处理 */ public void testPutAndQueryAdp() { - + final String apiName = "PutAndQueryAdp"; String srcObjectKey = "test/file1.mp4"; String newObjectKey = "new/Upload3.mp4"; //音视频处理 @@ -1640,93 +1157,87 @@ public class MainActivity extends AppCompatActivity { avconcat.setCommand("tag=avconcat&f=mp4&mode=1&file=" + com.ksyun.ks3.util.Base64.encode("test/file2.mp4".getBytes())); avconcat.setKey(newObjectKey); - PutAdpRequest adpRequest = new PutAdpRequest(SRC_BUCKETNAME, srcObjectKey, Arrays.asList(avconcat)); - adpRequest.setNotifyURL("http://127.0.0.1:9000/notify/url"); + PutObjectAdpRequest adpRequest = new PutObjectAdpRequest(SRC_BUCKETNAME, srcObjectKey, Arrays.asList(avconcat)); + adpRequest.setNotifyURL(PropertiesUtils.getProperties(this).getProperty("callback.url")); //音视频元数据获取 -// GetAdpRequest getAdpRequest = new GetAdpRequest("taskId"); -// client.getAdpTask(getAdpRequest, new GetObjectAdpResponceHandler() { -// @Override -// public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { -// StringBuffer stringBuffer = new StringBuffer(); -// stringBuffer.append( -// "getAdpRequest fail , states code :" + statesCode) -// .append("\n").append("responce :").append(response); -// stringBuffer.append("Exception :" -// + paramThrowable.toString()); -// Intent intent = new Intent(MainActivity.this, -// RESTAPITestResult.class); -// Bundle data = new Bundle(); -// data.putString(RESULT, stringBuffer.toString()); -// data.putString(API, "getAdpRequest"); -// intent.putExtras(data); -// startActivity(intent); -// Log.e("tag", "getAdpRequest--onFailure:" + stringBuffer.toString()); -// } -// -// @Override -// public void onSuccess(int statesCode, Header[] responceHeaders, AdpTask adpTask) { -// System.out.println("getAdpTask is " + adpTask.toString()); -// } -// }); + GetObjectAdpRequest request = new GetObjectAdpRequest("taskId"); + client.getAdpTask(request, new GetObjectAdpResponseHandler() { + @Override + public void onSuccess(GetObjectAdpRequest request, GetObjectAdpResult result) { + String resultStr = resultHandler(apiName, result, result.getAdpTask().toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + + @Override + public void onFailure(GetObjectAdpRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); //发送请求 - client.putAdpTask(adpRequest, new PutObjectAdpResponceHandler() { + client.putAdpTask(adpRequest, new PutObjectAdpResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append( - "putAdpTask fail , states code :" + statesCode) - .append("\n").append("responce :").append(response); - stringBuffer.append("Exception :" - + paramThrowable.toString()); - Intent intent = new Intent(MainActivity.this, - RESTAPITestResult.class); - Bundle data = new Bundle(); - data.putString(RESULT, stringBuffer.toString()); - data.putString(API, "putAdpTask"); - intent.putExtras(data); - startActivity(intent); - Log.e("tag", "putAdpTask--onFailure:" + stringBuffer.toString()); + public void onSuccess(PutObjectAdpRequest request, PutObjectAdpResult result) { + String resultStr = resultHandler(apiName, result, result.getTaskId()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, PutAdpResult adpResult) { - System.out.println("taskId is " + adpResult.getTaskId()); + public void onFailure(PutObjectAdpRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } public void postObject() { + bucketObjectInpuDialog + .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { + @Override + public void confirmBucketAndObject(final String name, final String key) { + new Thread() { + @Override + public void run() { + uploadFileByPost(name, key); + } + }.start(); + } + }); + bucketObjectInpuDialog.show(); + } + private void uploadFileByPost(String bucketName, String keyName) { final File file = new File(TEST_MULTIUPLOAD_FILE); - String key = "hahaha"; - Map postData = new HashMap(); - postData.put("acl","public-read"); + String key = StringUtils.isEmpty(keyName) ? "test.jpg" : keyName; + Map postData = new HashMap(); + postData.put("acl", "public-read"); postData.put("key", key); - List unknowValueField = new ArrayList(); - unknowValueField.add("name"); - PostObjectFormFields fields = client.getObjectFormFields(SRC_BUCKETNAME,file.getName(),postData,unknowValueField); - fields.getKssAccessKeyId(); - fields.getPolicy(); - fields.getSignature(); - - String uploadUrl = "http://" + END_POINT + "/" + SRC_BUCKETNAME; + List unknownValueField = new ArrayList(); + unknownValueField.add("name"); + PostObjectFormFields fields = client.getObjectFormFields(bucketName, file.getName(), postData, unknownValueField); + Log.i("Post Object", "Signature: " + fields.getSignature()); + + String uploadUrl = "http://" + bucketName + '.' + END_POINT; String end = "\r\n"; String twoHyphens = "--"; String boundary = "******"; + Log.d("Post Object", "Url: " + uploadUrl); try { URL url = new URL(uploadUrl); - HttpURLConnection httpURLConnection = (HttpURLConnection) url - .openConnection(); + HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); httpURLConnection.setUseCaches(false); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); httpURLConnection.setRequestProperty("Charset", "UTF-8"); - httpURLConnection.setRequestProperty("Content-Type", - "multipart/form-data;boundary=" + boundary); + httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream()); @@ -1759,142 +1270,363 @@ public class MainActivity extends AppCompatActivity { dos.writeBytes(end); dos.writeBytes(twoHyphens + boundary + end); - dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" - + file.getName() - + "\"" + end); + dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"" + end); dos.writeBytes(end); - //将SD 文件通过输入流读到Java代码中-++++++++++++++++++++++++++++++````````````````````````` + //将文件通过输入流读到Java代码中 FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[8192]; // 8k int count = 0; while ((count = fis.read(buffer)) != -1) { dos.write(buffer, 0, count); - } fis.close(); - System.out.println("file send to server............"); + Log.i("Post Object", "file send to server............"); dos.writeBytes(end); dos.writeBytes(twoHyphens + boundary + twoHyphens + end); dos.flush(); //读取服务器返回结果 int code = httpURLConnection.getResponseCode(); - System.out.println("response code: " + code); + Log.i("Post Object", "Status Code: " + code); InputStream is = null; - if (code == 200) { + if (code == 200 || code == 201 || code == 204) { is = httpURLConnection.getInputStream(); + ToastUtils.showShort("post上传成功~"); } else { is = httpURLConnection.getErrorStream(); } InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); - StringBuilder sb = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder(); String result; - while ((result = br.readLine()) != null) { - sb.append(result); + stringBuilder.append(result); } - System.out.println(sb.toString()); + Log.d("Post Object", "Result: " + stringBuilder.toString()); is.close(); dos.close(); - } catch (Exception e) { e.printStackTrace(); - System.out.println(e.getMessage()); + Log.e("Post Object", "Error: " + e.getMessage()); } - } public void putObjectFetch() { + final String apiName = "Put Object Fetch"; + PutObjectFetchRequest request = new PutObjectFetchRequest(SRC_BUCKETNAME, "fetch-object.png", "https://pic.imgdb.cn/item/5f9a786f1cd1bbb86bcc04aa.png"); + client.putObjectFetch(request, new PutObjectFetchResponseHandler() { + @Override + public void onTaskSuccess(PutObjectFetchRequest request, PutObjectFetchResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - final String srcObjectKey = "OnlineTest/sdk/demo/KS3SDKDemo.zip"; - String sourceUrl = ""; - PutObjectFetchRequest putObjectFetchRequest = new PutObjectFetchRequest(SRC_BUCKETNAME, srcObjectKey, sourceUrl); - client.putObjectFetch(putObjectFetchRequest, new PutObjectFetchResponseHandler() { @Override - public void onTaskFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - System.out.println("fail putObjectFetch is " + response); + public void onTaskFailure(PutObjectFetchRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } + }); + } + public void putObjectTag() { + final String apiName = "Put Object Tagging"; + ObjectTagging objectTagging = new ObjectTagging(); + objectTagging.addObjectTag("tagA", "A"); + PutObjectTaggingRequest request = new PutObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY, objectTagging); + client.putObjectTag(request, new PutObjectTaggingResponseHandler() { @Override - public void onTaskSuccess(int statesCode, Header[] responceHeaders, PutObjectFetchResult result) { - System.out.println("success putObjectFetch is " + result.toString()); + public void onSuccess(PutObjectTaggingRequest request, PutObjectTaggingResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + + @Override + public void onFailure(PutObjectTaggingRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); + } + + public void getObjectTag() { + final String apiName = "Get Object Tagging"; + GetObjectTaggingRequest request = new GetObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY); + client.getObjectTag(request, new GetObjectTaggingResponseHandler() { + @Override + public void onSuccess(GetObjectTaggingRequest request, GetObjectTaggingResult result) { + String resultStr = resultHandler(apiName, result, result.getTagging().toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + @Override + public void onFailure(GetObjectTaggingRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); } - /** - * put object tag - */ - public void testPutObjTag() { + public void deleteObjectTag() { + final String apiName = "Delete Object Tagging"; + DeleteObjectTaggingRequest request = new DeleteObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY); + client.deleteObjectTag(request, new DeleteObjectTaggingResponseHandler() { + @Override + public void onSuccess(DeleteObjectTaggingRequest request, DeleteObjectTaggingResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - //文档参考 -> https://docs.ksyun.com/documents/949 - ObjectTagging objectTagging = new ObjectTagging(); - objectTagging.addObjectTag("tagA", "A"); + @Override + public void onFailure(DeleteObjectTaggingRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); + } - PutObjectTaggingRequest taggingRequest = new PutObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY, objectTagging); - client.putObjectTag(taggingRequest, new Ks3HttpResponceHandler() { + public void initiateMultipartUpload() { + final String apiName = "Init Multipart Upload"; + InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(SRC_BUCKETNAME, "test.mp4"); + client.initiateMultipartUpload(request, new InitiateMultipartUploadResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { + public void onSuccess(InitiateMultipartUploadRequest request, InitiateMultipartUploadResult result) { + String resultStr = resultHandler(apiName, result, "uploadId: " + result.getUploadId()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - System.out.println("success putObjectTaggingResponse is " + response.toString()); - GetObjectTaggingRequest taggingRequest = new GetObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY); - client.getObjectTag(taggingRequest, new GetObjectTaggingResponseHandler() { - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - System.out.println("fail getObjectTaggingResponse is " + response.toString()); - } + @Override + public void onFailure(InitiateMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); + } - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, ObjectTagging tagging) { - System.out.println("success getObjectTaggingResponse is " + tagging.toString()); - } - }); + public void uploadPart() { + final String apiName = "Upload Part"; + UploadPartRequest request = new UploadPartRequest(SRC_BUCKETNAME, "test.mp4", "uploadId", new File(TEST_MULTIUPLOAD_FILE), 1024, 1, 1024); + client.uploadPart(request, new UploadPartResponseHandler() { + @Override + public void onSuccess(UploadPartRequest request, UploadPartResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - System.out.println("fail putObjectTaggingResponse is " + new String(response)); + public void onTaskProgress(double progress) { + Log.d(apiName, " ---onTaskProgress---" + progress); + } + + @Override + public void onFailure(UploadPartRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); + } - DeleteObjectTaggingRequest deleteObjectTaggingRequest = new DeleteObjectTaggingRequest(SRC_BUCKETNAME, SRC_OBJECTKEY); - client.deleteObjectTag(deleteObjectTaggingRequest, new HeadBucketResponseHandler() { + public void listParts() { + final String apiName = "List Parts"; + ListPartsRequest request = new ListPartsRequest(SRC_BUCKETNAME, "test.mp4", "uploadId"); + client.listParts(request, new ListPartsResponseHandler() { @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - System.out.println("fail DeleteObjectTaggingRequest is " + new String(response)); + public void onSuccess(ListPartsRequest request, ListPartsResult result) { + StringBuilder stringBuilder = new StringBuilder(); + List parts = result.getParts(); + for (Part part : parts) { + stringBuilder.append(part.getPartNumber()).append(" ").append(part.getETag()).append("\n"); + } + String resultStr = resultHandler(apiName, result, stringBuilder.toString()); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onSuccess(int statesCode, Header[] responceHeaders) { - System.out.println("onSuccess DeleteObjectTaggingRequest"); + public void onFailure(ListPartsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); } - /** - * testPutFetchObj - */ - public void testPutFetchObj() { + public void completeMultipartUpload() { + final String apiName = "Comp Multipart Upload"; + List partETags = new ArrayList(); + CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(SRC_BUCKETNAME, "test.mp4", "uploadId", partETags); + client.completeMultipartUpload(request, new CompleteMultipartUploadResponseHandler() { + @Override + public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } - ObjectTagging objectTagging = new ObjectTagging(); - objectTagging.addObjectTag("tagA", "A"); + @Override + public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); + } - PutObjectFetchRequest putObjectFetchRequest = new PutObjectFetchRequest(SRC_BUCKETNAME, "zzzz", "http://ks3tools-online.ks3-cn-beijing.ksyun.com/tools/release/ks3up-tool-2.1.1-dist.zip", objectTagging); - putObjectFetchRequest.setCallBack("https://open.feishu.cn/open-apis/bot/v2/hook/704de274-447f-400f-a634-075df20fd1ba", putObjectFetchRequest.getCallBackBody(), putObjectFetchRequest.getHeader()); - client.putObjectFetch(putObjectFetchRequest, new Ks3HttpResponceHandler() { + public void abortMultipartUpload() { + final String apiName = "Abort Multipart Upload"; + AbortMultipartUploadRequest request = new AbortMultipartUploadRequest(SRC_BUCKETNAME, "test.mp4", "uploadId"); + client.abortMultipartUpload(request, new AbortMultipartUploadResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { + public void onSuccess(AbortMultipartUploadRequest request, AbortMultipartUploadResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + } + + @Override + public void onFailure(AbortMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + } + }); + } - System.out.println("success putObjectFetchResponse is " + new String(response)); + public void multipartUpload() { + final String apiName = "Multipart Upload"; + File file = new File(Constants.TEST_MULTIUPLOAD_FILE); + long partSize = 1024 * 1024 * 5; + MultiUploader uploader = new MultiUploader(client, SRC_BUCKETNAME, "test", file, partSize); + // 设置回调函数 监听是否成功 + uploader.setHandler(new CompleteMultipartUploadResponseHandler() { + @Override + public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); } @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - System.out.println("fail putObjectFetchResponse is " + new String(response)); + public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); } }); + uploader.upload(); + } + + public void multipartUploadExample() { + File file = new File(Constants.TEST_MULTIUPLOAD_FILE); + long partSize = 1024 * 1024 * 2; + MultipartUploadExample uploader = new MultipartUploadExample(client, SRC_BUCKETNAME, "test", file, partSize); + uploader.upload(); + } + + public void toResultPage(String currentPage, String result) { + Intent intent = new Intent( + MainActivity.this, + RESTAPITestResult.class); + + Bundle data = new Bundle(); + data.putString(RESULT, result); + data.putString(API, currentPage + " Result"); + intent.putExtras(data); + startActivity(intent); + } + + public void getObjectAsync() { + bucketObjectInpuDialog + .setOnBucketObjectDialogListener(new OnBucketObjectDialogListener() { + @Override + public void confirmBucketAndObject(final String name, final String key) { + new Thread() { + @Override + public void run() { + getObject(name, key); + } + }.start(); + } + }); + bucketObjectInpuDialog.show(); + } + + public void getObject(String bucketName, final String objectKey) { + final String apiName = "Get Object"; + GetObjectRequest request = new GetObjectRequest(bucketName, objectKey); + File storeFolder = new File(Environment.getExternalStorageDirectory(), "ksyun_download"); + File file = new File(storeFolder, objectKey); + client.getObject(request, new GetObjectResponseHandler(file, bucketName, objectKey) { + @Override + public void onSuccess(GetObjectRequest request, GetObjectResult result) { + String resultStr = resultHandler(apiName, result, ""); + toResultPage(apiName, resultStr); + Log.i(apiName, apiName + " ---onSuccess---" + resultStr); + ToastUtils.showShort("下载成功"); + } + + @Override + public void onTaskProgress(double progress) { + Log.d(apiName, " ---onTaskProgress---" + progress); + } + + @Override + public void onFailure(GetObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + String resultStr = exceptionHandler(apiName, clientException, serviceException); + toResultPage(apiName, resultStr); + Log.e(apiName, apiName + " ---onFailure---" + resultStr); + ToastUtils.showShort("下载失败"); + } + + @Override + public void onTaskCancel() { + ToastUtils.showShort("任务取消"); + } + }); + } + + public String exceptionHandler(String apiName, Ks3ClientException clientException, Ks3ServiceException serviceException) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(apiName) + .append(" Fail!\n"); + if (clientException != null) { + stringBuilder.append("ClientException: ") + .append(clientException.getMessage()) + .append("\n"); + } + if (serviceException != null) { + stringBuilder.append("ServiceException: ") + .append(serviceException.getMessage()) + .append("\n"); + } + return stringBuilder.toString(); + } + + public String resultHandler(String apiName, Ks3Result result, String extraStr) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(apiName) + .append(" Success!\n") + .append("Result: ") + .append("Status Code: ") + .append(result.getStatusCode()) + .append("\n") + .append("Request Id: ") + .append(result.getHeaders().get("x-kss-request-id")) + .append("\n") + .append(extraStr); + return stringBuilder.toString(); } } diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultiUploadActivity.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultiUploadActivity.java index 5d53dcd8368ea15ef9933615b5d3a7cd9344a326..e985405327a433fd9e5f23ed01f588c089df5761 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultiUploadActivity.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultiUploadActivity.java @@ -3,6 +3,7 @@ package com.ks3.demo.main; import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,14 +12,21 @@ import android.widget.Button; import android.widget.ListView; import android.widget.TextView; +import com.blankj.utilcode.util.ToastUtils; +import com.ksyun.ks3.exception.Ks3ClientException; +import com.ksyun.ks3.exception.Ks3ServiceException; +import com.ksyun.ks3.model.result.CompleteMultipartUploadResult; import com.ksyun.ks3.services.Ks3Client; +import com.ksyun.ks3.services.MultiUploader; +import com.ksyun.ks3.services.handler.CompleteMultipartUploadResponseHandler; +import com.ksyun.ks3.services.request.CompleteMultipartUploadRequest; import java.io.File; import java.util.ArrayList; import java.util.List; public class MultiUploadActivity extends Activity { - + final private String TAG = "MultiUploader"; private List fileInfos; @Override @@ -30,13 +38,13 @@ public class MultiUploadActivity extends Activity { listView.setAdapter(new ListViewAdapter(fileInfos)); } - private void getFileInfo(){ + private void getFileInfo() { fileInfos = new ArrayList(); Ks3Client client = Ks3ClientFactory.getDefaultClient(MultiUploadActivity.this); - fileInfos.add(new MultiUploader(client, Constants.TEST_MULTIUPLOAD_BUCKET, "11.txt", + fileInfos.add(new MultiUploader(client, Constants.TEST_MULTIUPLOAD_BUCKET, "pdf.pdf", new File(Constants.TEST_MULTIUPLOAD_FILE)));//, "bb20153e438047b3bc3212f37e25fd9c")); - fileInfos.add(new MultiUploader(client, Constants.TEST_MULTIUPLOAD_BUCKET, "11.txt", - new File(Constants.TEST_MULTIUPLOAD_FILE), "8b67c9679fae436ba754b4bafc29ca37")); + fileInfos.add(new MultiUploader(client, Constants.TEST_MULTIUPLOAD_BUCKET, "reload-pdf.pdf", + new File(Constants.TEST_MULTIUPLOAD_FILE), "7ab054f4c6b44a9cadb163a82ae05a54")); } public class ListViewAdapter extends BaseAdapter { @@ -44,9 +52,9 @@ public class MultiUploadActivity extends Activity { public ListViewAdapter(List list) { itemViews = new View[list.size()]; - for(int i=0;i doneParts = Collections.synchronizedList(new ArrayList()); - List leftParts = Collections.synchronizedList(new ArrayList()); - - private CompleteMultipartUploadResponseHandler multiHandler; - - private void create(Ks3Client client, String bucketName, String key, File file, String uploadId, long partSize){ - this.client = client; - this.bucketName = bucketName; - this.key = key; - this.file = file; - this.uploadId = uploadId; - this.partSize = partSize; - } - - public MultiUploader(Ks3Client client, String bucketName, String key, File file, String uploadId, long partSize){ - create(client, bucketName,key, file, uploadId, partSize); - } - - public MultiUploader(Ks3Client client, String bucketName, String key, File file, String uploadId){ - create(client, bucketName, key, file, uploadId, partSize); - } - public MultiUploader(Ks3Client client, String bucketName, String key, File file){ - create(client, bucketName, key, file, null, partSize); - } - public MultiUploader(Ks3Client client, String bucketName, String key, File file, long partSize){ - create(client, bucketName, key, file, null, partSize); - } - - public void setConcurrentNo(int no){ concurrentNo = no; } - - public void setHandler(CompleteMultipartUploadResponseHandler uploadResponseHandler){ - multiHandler = uploadResponseHandler; - } - - public String getKey(){ - return key; - } - public String getUploadId(){ - return uploadId; - } - - abstract class MyUploadPartResponceHandler extends UploadPartResponceHandler { - private String key; - private int partNo; - private String uploadId; - public abstract void onSuccess(int statesCode, Header[] responceHeaders, PartETag result, String key, int partNo, String uploadId); - public abstract void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable throwable - , String key, int partNo, String uploadId); - public abstract void onTaskProgress(double progress, String key, int partNo, String uploadId); - - public MyUploadPartResponceHandler(String key, int partNo, String uploadId){ - this.key = key; - this.partNo = partNo; - this.uploadId = uploadId; - } - @Override - public void onTaskProgress(double progress) { - onTaskProgress(progress, key, partNo, uploadId); - } - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, PartETag result) { - onSuccess(statesCode, responceHeaders, result, key, partNo, uploadId); - } - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable throwable) { - onFailure(statesCode,error,responceHeaders,response,throwable, key, partNo, uploadId); - } - } - - private final MyHandler mHandler = new MyHandler(); - - class MyHandler extends Handler { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case INIT_DONE: - uploadParts(); - break; - case PARTS_DONE: - completeUpload(); - break; - case GET_UPLOADED_DONE: - List res = (List)msg.obj; - reUpload(res); - break; - case LIMIT_DONE: - int no = msg.arg1; - int N = msg.arg2; - doWithLimit(no, N); - default: - break; - } - } - } - - /* - return false, if uploadId hasbeen got - */ - public boolean upload(){ - if(uploadId != null) return false; - InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, key); - client.initiateMultipartUpload(request, new InitiateMultipartUploadResponceHandler(){ - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - Log.w(TAG, "init multiupload fail, statesCode="+statesCode, paramThrowable); - } - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, InitiateMultipartUploadResult result) { - uploadId = result.getUploadId(); - Log.d(TAG, "init multiupload success, uploadId="+uploadId + ",key="+key); - mHandler.sendEmptyMessage(INIT_DONE); - } - }); - return true; - } - - private List convertPart(List list){ - List res = new ArrayList(); - for(Part p : list) { - res.add(new PartETag(p.getPartNumber(), p.getETag())); - } - return res; - } - /* - Get from ks3 server. call list parts API. - */ - public void getUploadedParts(){ - final List res = new ArrayList(); - final ListPartsResponseHandler listPartsResponseHandler = new ListPartsResponseHandler() { - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - Log.w(TAG, "list parts, statesCode="+statesCode, paramThrowable); - } - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, ListPartsResult listPartsResult) { - res.addAll(convertPart(listPartsResult.getParts())); - if(! listPartsResult.isTruncated()) - mHandler.sendMessage(Message.obtain(mHandler, GET_UPLOADED_DONE, res)); - else - Log.e(TAG, "File size too largs. You may not use phone to upload"); - } - }; - client.listParts(bucketName, key, uploadId, listPartsResponseHandler); - } - - public List getLeftParts(List uploadedParts){ - List res = new ArrayList(); - long start = 0L; - int partNumber = 1; - Set set = new HashSet(); - for(PartETag p : uploadedParts){ - set.add(p.getPartNumber()); - } - while(start= N) { - mHandler.sendEmptyMessage(PARTS_DONE); - } else if(cur.get()%concurrentNo==0){ - mHandler.sendMessage(Message.obtain(mHandler,LIMIT_DONE, cur.get(), N)); - } - } - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable throwable, - String key, int partNo, String uploadId) { - // you may record this failure info in file, database, or backend - Log.w(TAG, "upload part fail, uploadId="+uploadId+",key="+key+",partNo="+partNo, throwable); - if(multiHandler!=null) - multiHandler.onFailure(statesCode, error, responceHeaders, response, throwable); - } - @Override - public void onTaskProgress(double progress, String key, int partNo, String uploadId) { - Log.d(TAG, "progress:"+progress+",key="+key+",partNo"+partNo); - } - }); - } - } - - public void reUpload(final List uploadedParts){ - leftParts = getLeftParts(uploadedParts); - int N = leftParts.size() + uploadedParts.size(); - cur = new AtomicInteger(0); - doneParts.addAll(uploadedParts); - if(leftParts.isEmpty()) - mHandler.sendEmptyMessage(PARTS_DONE); - doWithLimit(0, N); - } - - private void uploadParts(){ - reUpload(new ArrayList()); - } - - private void completeUpload(){ - if(multiHandler==null){ - multiHandler = new CompleteMultipartUploadResponseHandler(){ - @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - Log.w(TAG, "complete upload fail, statusCode="+statesCode, paramThrowable); - } - @Override - public void onSuccess(int statesCode, Header[] responceHeaders, CompleteMultipartUploadResult result) { - Log.i(TAG, "complete upload, key="+key); - } - }; - } - client.completeMultipartUpload(bucketName,key,uploadId,doneParts, multiHandler); - } -} diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultipartUploadExample.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultipartUploadExample.java new file mode 100644 index 0000000000000000000000000000000000000000..3060376088e85a1b5333994a2965bc2857a6203e --- /dev/null +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MultipartUploadExample.java @@ -0,0 +1,161 @@ +package com.ks3.demo.main; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import com.ksyun.ks3.exception.Ks3ClientException; +import com.ksyun.ks3.exception.Ks3ServiceException; +import com.ksyun.ks3.model.PartETag; +import com.ksyun.ks3.model.result.CompleteMultipartUploadResult; +import com.ksyun.ks3.model.result.InitiateMultipartUploadResult; +import com.ksyun.ks3.model.result.UploadPartResult; +import com.ksyun.ks3.services.Ks3Client; +import com.ksyun.ks3.services.handler.CompleteMultipartUploadResponseHandler; +import com.ksyun.ks3.services.handler.InitiateMultipartUploadResponseHandler; +import com.ksyun.ks3.services.handler.UploadPartResponseHandler; +import com.ksyun.ks3.services.request.CompleteMultipartUploadRequest; +import com.ksyun.ks3.services.request.InitiateMultipartUploadRequest; +import com.ksyun.ks3.services.request.UploadPartRequest; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class MultipartUploadExample { + final private String TAG = "MultiUploadExample"; + private String bucketName; + private String key; + private File file; + private long partSize = 5 * 1024 * 1024; + private String uploadId; + private Ks3Client client; + final static private int STATE_UPLOAD_INIT = 0; + final static private int STATE_UPLOAD_NEXT = 1; + final static private int STATE_UPLOAD_COMPLETE = 2; + final static private int STATE_UPLOAD_FAILED = 3; + final private List uploadedParts = new ArrayList<>(); + UploadPartRequestFactory localUploadPartRequestFactory = null; + + private void create(Ks3Client client, String bucketName, String key, File file, long partSize) { + this.client = client; + this.bucketName = bucketName; + this.key = key; + this.file = file; + this.partSize = partSize; + } + + public MultipartUploadExample(Ks3Client client, String bucketName, String key, File file) { + create(client, bucketName, key, file, partSize); + } + + public MultipartUploadExample(Ks3Client client, String bucketName, String key, File file, long partSize) { + create(client, bucketName, key, file, partSize); + } + + private final UploadHandler handler = new UploadHandler(); + + class UploadHandler extends Handler { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case STATE_UPLOAD_INIT: + initUpload(); + break; + case STATE_UPLOAD_NEXT: + uploadPart(); + break; + case STATE_UPLOAD_COMPLETE: + completeUpload(); + break; + case STATE_UPLOAD_FAILED: + Log.e(TAG, "upload failed"); + default: + break; + } + } + } + + public void upload() { + handler.sendEmptyMessage(STATE_UPLOAD_INIT); + } + + private void initUpload() { + InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, key); + client.initiateMultipartUpload(request, new InitiateMultipartUploadResponseHandler() { + @Override + public void onSuccess(InitiateMultipartUploadRequest request, InitiateMultipartUploadResult result) { + uploadId = result.getUploadId(); + localUploadPartRequestFactory = new UploadPartRequestFactory(bucketName, key, uploadId, file, partSize); + Log.i(TAG, "init multipart upload success, uploadId=" + uploadId); + handler.sendEmptyMessage(STATE_UPLOAD_NEXT); + } + + @Override + public void onFailure(InitiateMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + if (clientException != null) { + Log.e(TAG, "init multipart upload fail, clientException=" + clientException.getMessage()); + } + if (serviceException != null) { + Log.e(TAG, "init multipart upload fail, serviceException=" + serviceException.getMessage()); + } + handler.sendEmptyMessage(STATE_UPLOAD_FAILED); + } + }); + } + + private void uploadPart() { + if (localUploadPartRequestFactory.hasMoreRequests()) { + UploadPartRequest request = localUploadPartRequestFactory.getNextUploadPartRequest(); + client.uploadPart(request, new UploadPartResponseHandler() { + @Override + public void onSuccess(UploadPartRequest request, UploadPartResult result) { + PartETag partETag = result.getPartETag(); + partETag.setPartNumber(request.getPartNumber()); + uploadedParts.add(partETag); + Log.i(TAG, "upload part success, partNumber=" + partETag.getPartNumber() + ", eTag=" + partETag.geteTag()); + handler.sendEmptyMessage(STATE_UPLOAD_NEXT); + } + + @Override + public void onTaskProgress(double progress) { + } + + @Override + public void onFailure(UploadPartRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + if (clientException != null) { + Log.e(TAG, "upload part fail, clientException=" + clientException.getMessage()); + } + if (serviceException != null) { + Log.e(TAG, "upload part fail, serviceException=" + serviceException.getMessage()); + } + handler.sendEmptyMessage(STATE_UPLOAD_FAILED); + } + }); + } else { + // 发送完成消息 + handler.sendEmptyMessage(STATE_UPLOAD_COMPLETE); + } + } + + private void completeUpload() { + CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(bucketName, key, uploadId, uploadedParts); + client.completeMultipartUpload(request, new CompleteMultipartUploadResponseHandler() { + @Override + public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) { + Log.i(TAG, "complete multipart upload success, status code=" + result.getStatusCode()); + } + + @Override + public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + if (clientException != null) { + Log.e(TAG, "complete multipart upload fail, clientException=" + clientException.getMessage()); + } + if (serviceException != null) { + Log.e(TAG, "complete multipart upload fail, serviceException=" + serviceException.getMessage()); + } + handler.sendEmptyMessage(STATE_UPLOAD_FAILED); + } + }); + } +} diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MyApplication.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MyApplication.java index 5167dd2f035bc1e2221165d457ac3be55faf1176..ff8ccc33ff1ebd9c2b994342691088baaa36d496 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MyApplication.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/MyApplication.java @@ -10,5 +10,8 @@ public class MyApplication extends Application { public void onCreate() { super.onCreate(); Utils.init(this); + String ak = PropertiesUtils.getProperties(this).getProperty("ak"); + String sk = PropertiesUtils.getProperties(this).getProperty("sk"); + Constants.setAKSK(ak, sk); } } diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/ObjectMetadataBuilder.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/ObjectMetadataBuilder.java index 635d9c028a2e1881a040b65fe41f02ac9516251f..ab83480b64ee0d16b6fd604330ec1279a9c54eab 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/ObjectMetadataBuilder.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/ObjectMetadataBuilder.java @@ -2,9 +2,8 @@ package com.ks3.demo.main; import android.util.Log; -import com.ks3.demo.main.utils.DateUtils; -import com.ksyun.ks3.model.HttpHeaders; import com.ksyun.ks3.model.ObjectMetadata; +import com.ksyun.ks3.util.DateUtil; import java.util.Date; import java.util.List; @@ -70,7 +69,7 @@ public class ObjectMetadataBuilder { if (headers.containsKey("Last-Modified") && !((List) headers.get("Last-Modified")).isEmpty()) { try { - Date e = DateUtils.parseRfc822Date((String) ((List) headers.get("Last-Modified")).get(0)); + Date e = DateUtil.parseRfc822Date((String) ((List) headers.get("Last-Modified")).get(0)); meta.addOrEditMeta(ObjectMetadata.Meta.LastModified, e.toString()); } catch (Exception var3) { Log.e("tag", "Unknow date format:" + (String) ((List) headers.get("Last-Modified")).get(0)); diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/PropertiesUtils.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/PropertiesUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..3bbb936092df3cbfdc22ea98bedcea9d0300c3dd --- /dev/null +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/PropertiesUtils.java @@ -0,0 +1,22 @@ +package com.ks3.demo.main; + +import android.content.Context; + +import java.io.InputStream; +import java.util.Properties; + +public class PropertiesUtils { + + private final static String m_strPath = "/assets/global.properties"; + + public static Properties getProperties(Context c){ + Properties props = new Properties(); + try { + InputStream in = PropertiesUtils.class.getResourceAsStream(m_strPath); + props.load(in); + } catch (Exception e) { + e.printStackTrace(); + } + return props; + } +} diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/TransferUtils.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/TransferUtils.java index 5fff4c5cb487986e5014e28cb23b215df39a200b..e6cbfb95f99b341ffc0cbc9e3f8d4c740dec75f1 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/TransferUtils.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/TransferUtils.java @@ -1,7 +1,7 @@ package com.ks3.demo.main; import java.io.File; -import android.util.Log; + import com.ksyun.ks3.model.transfer.TransferManagerConfiguration; import com.ksyun.ks3.services.request.PutObjectRequest; @@ -48,7 +48,7 @@ public class TransferUtils { File localFile = getRequestFile(paramPutObjectRequest); if (localFile != null) return localFile.length(); - if ((paramPutObjectRequest.getRequestBody() != null) && (paramPutObjectRequest.getObjectMeta().getContentLength() > 0L)) + if ((paramPutObjectRequest.getInputStreamBody() != null) && (paramPutObjectRequest.getObjectMeta().getContentLength() > 0L)) return paramPutObjectRequest.getObjectMeta().getContentLength(); return -1L; } diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/UploadActivity.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/UploadActivity.java index 2ed70ff2777fec2ca2a83043af6d11a9ed432f2d..1892f9bd21739e2c6dd70fb3e080c6ffb293a74b 100644 --- a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/UploadActivity.java +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/UploadActivity.java @@ -25,39 +25,39 @@ import android.widget.TextView; import android.widget.Toast; import com.ks3.demo.main.BucketInpuDialog.OnBucketDialogListener; -import com.ksyun.ks3.exception.Ks3Error; +import com.ksyun.ks3.exception.Ks3ClientException; +import com.ksyun.ks3.exception.Ks3ServiceException; import com.ksyun.ks3.model.ObjectMetadata; -import com.ksyun.ks3.model.PartETag; import com.ksyun.ks3.model.PostObjectFormFields; import com.ksyun.ks3.model.acl.CannedAccessControlList; +import com.ksyun.ks3.model.result.AbortMultipartUploadResult; import com.ksyun.ks3.model.result.CompleteMultipartUploadResult; import com.ksyun.ks3.model.result.InitiateMultipartUploadResult; import com.ksyun.ks3.model.result.ListPartsResult; +import com.ksyun.ks3.model.result.PostObjectResult; +import com.ksyun.ks3.model.result.PutObjectResult; +import com.ksyun.ks3.model.result.UploadPartResult; import com.ksyun.ks3.services.Ks3Client; import com.ksyun.ks3.services.Ks3ClientConfiguration; import com.ksyun.ks3.services.handler.AbortMultipartUploadResponseHandler; import com.ksyun.ks3.services.handler.CompleteMultipartUploadResponseHandler; -import com.ksyun.ks3.services.handler.InitiateMultipartUploadResponceHandler; -import com.ksyun.ks3.services.handler.Ks3HttpResponceHandler; +import com.ksyun.ks3.services.handler.InitiateMultipartUploadResponseHandler; import com.ksyun.ks3.services.handler.ListPartsResponseHandler; +import com.ksyun.ks3.services.handler.PostObjectResponseHandler; import com.ksyun.ks3.services.handler.PutObjectResponseHandler; -import com.ksyun.ks3.services.handler.UploadPartResponceHandler; +import com.ksyun.ks3.services.handler.UploadPartResponseHandler; import com.ksyun.ks3.services.request.AbortMultipartUploadRequest; import com.ksyun.ks3.services.request.CompleteMultipartUploadRequest; import com.ksyun.ks3.services.request.InitiateMultipartUploadRequest; import com.ksyun.ks3.services.request.ListPartsRequest; import com.ksyun.ks3.services.request.PutObjectRequest; import com.ksyun.ks3.services.request.UploadPartRequest; -import com.ksyun.ks3.services.request.object.PostObjectRequest; +import com.ksyun.ks3.services.request.PostObjectRequest; import com.ksyun.ks3.services.request.tag.ObjectTagging; -import org.junit.Test; - -import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.Serializable; import java.net.HttpURLConnection; import java.net.URL; @@ -69,8 +69,6 @@ import java.util.Map; import javax.net.ssl.HttpsURLConnection; -import cz.msebera.android.httpclient.Header; - import static com.ks3.demo.main.Constants.SRC_BUCKETNAME; import static com.ks3.demo.main.Constants.SRC_OBJECTKEY; @@ -291,7 +289,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { currentDirTextView = (TextView) findViewById(R.id.current_dir_tv); currentDir = Environment.getExternalStorageDirectory(); setUp(); - // doSingleUploadByUrl(); + // doSingleUploadByUrl(); } @@ -425,12 +423,12 @@ public class UploadActivity extends Activity implements OnItemClickListener { } try { - URLConnection connection = getHttpURLConnection("http://ks3-console-bja.ksyun.com/api/object/download?key=tet.png&bucket=chenqichen"); + URLConnection connection = getHttpURLConnection("http://ks3-console-bja.ksyun.com/api/object/download?key=tet.png&bucket=chenqichen"); InputStream input = connection.getInputStream(); ObjectTagging objectTagging = new ObjectTagging(); objectTagging.addObjectTag("tagA", "A"); - ObjectMetadata objectMetadata = ObjectMetadataBuilder.build(connection.getHeaderFields()); - final PutObjectRequest requestTwo = new PutObjectRequest(SRC_BUCKETNAME,SRC_OBJECTKEY, input, objectMetadata,objectTagging); + ObjectMetadata objectMetadata = ObjectMetadataBuilder.build(connection.getHeaderFields()); + final PutObjectRequest requestTwo = new PutObjectRequest(SRC_BUCKETNAME, SRC_OBJECTKEY, input, objectMetadata, objectTagging); // Adp adp = new Adp(); // adp.setBucket(SRC_BUCKETNAME); // adp.setCommand("tag=avinfo"); @@ -439,74 +437,77 @@ public class UploadActivity extends Activity implements OnItemClickListener { // requestTwo.setAdps(Arrays.asList(adp)); client.putObject(requestTwo, new PutObjectResponseHandler() { - @Override - public void onTaskProgress(double progress) { - System.out.println("progress is "+progress); - } +// @Override +// public void onTaskProgress(double progress) { +// System.out.println("progress is "+progress); +// } @Override - public void onTaskFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { - Toast.makeText(UploadActivity.this, "onTaskFailure statesCode is " + statesCode, + public void onTaskFailure(PutObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + Toast.makeText(UploadActivity.this, "onTaskFailure statusCode is " + serviceException.getStatusCode(), Toast.LENGTH_SHORT).show(); } @Override - public void onTaskSuccess(int statesCode, Header[] responceHeaders) { - Toast.makeText(UploadActivity.this, "onTaskSuccess statesCode is " + statesCode, + public void onTaskSuccess(PutObjectRequest request, PutObjectResult result) { + Toast.makeText(UploadActivity.this, "onTaskSuccess statusCode is " + result.getStatusCode(), Toast.LENGTH_SHORT).show(); } @Override - public void onTaskStart() { - Toast.makeText(UploadActivity.this, "onTaskStart", - Toast.LENGTH_SHORT).show(); - } + public void onTaskCancel() { - @Override - public void onTaskFinish() { - Toast.makeText(UploadActivity.this, "onTaskFinish", - Toast.LENGTH_SHORT).show(); } @Override - public void onTaskCancel() { + public void onTaskProgress(double progress) { } }); } catch (Exception e) { - System.out.println(e.getMessage()); + System.out.println(e.getMessage()); } } + public void postObject(final String bucketName, final UploadFile item) { - final String srcObjectKey = "OnlineTest/sdk/demo/KS3SDKDemo.zip"; + final String srcObjectKey = "KS3SDKDemo.zip"; final File file = item.file; - Map postData = new HashMap(); - postData.put("acl","public-read"); - postData.put("key","20150115/中文/${filename}"); + Map postData = new HashMap(); + postData.put("acl", "public-read"); + postData.put("key", "20150115/中文/${filename}"); List unknowValueField = new ArrayList(); unknowValueField.add("name"); - PostObjectFormFields fields = client.getObjectFormFields(SRC_BUCKETNAME,file.getName(),postData,unknowValueField); + PostObjectFormFields fields = client.getObjectFormFields(bucketName, file.getName(), postData, unknowValueField); fields.getKssAccessKeyId(); fields.getPolicy(); fields.getSignature(); - PostObjectRequest postObjectRequest = new PostObjectRequest(SRC_BUCKETNAME, srcObjectKey, file,fields); + PostObjectRequest postObjectRequest = new PostObjectRequest(bucketName, srcObjectKey, file, fields); //表单上传需要这个auth 计算签名 postObjectRequest.auth = client.auth; - client.postObject(postObjectRequest, new Ks3HttpResponceHandler() { + client.postObject(postObjectRequest, new PostObjectResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) { - System.out.println("onSuccess postObject is " + new String(response)); + public void onSuccess(PostObjectRequest request, PostObjectResult result) { + System.out.println("onSuccess postObject is " + result.getStatusCode()); } + @Override - public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) { - System.out.println("onFailure postObject is " + new String(response)); + public void onFailure(PostObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + if (clientException != null) { + Log.e("UploadActivity", clientException.getMessage()); + System.out.println("onFailure postObject is " + clientException.getMessage()); + } + if (serviceException != null) { + Log.e("UploadActivity", serviceException.getResponse()); + System.out.println("onFailure postObject is " + serviceException.getResponse()); + } } }); } + // 上传文件 private void doSingleUpload(final String bucketName, final UploadFile item) { @@ -514,7 +515,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { ObjectTagging objectTagging = new ObjectTagging(); objectTagging.addObjectTag("tagA", "A"); final PutObjectRequest request = new PutObjectRequest(bucketName, - "test.3gp", item.file,null,objectTagging); + "test.3gp", item.file, null, objectTagging); request.setCannedAcl(CannedAccessControlList.PublicRead); // Map customParams = new HashMap(); @@ -550,55 +551,23 @@ public class UploadActivity extends Activity implements OnItemClickListener { } @Override - public void onTaskSuccess(int statesCode, Header[] responceHeaders) { + public void onTaskSuccess(PutObjectRequest request, PutObjectResult result) { Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, "success"); } - @Override - public void onTaskStart() { - List uploadFiles = dataSource.get(currentDir - .getPath()); - for (UploadFile file : uploadFiles) { - if (file.file.getPath().equalsIgnoreCase( - item.file.getPath())) { - file.status = UploadFile.STATUS_STARTED; - file.progress = 0; - item.status = UploadFile.STATUS_STARTED; - item.progress = 0; - } - } - mHandler.sendEmptyMessage(UPDATE_SINGLE_UPLOAD_STATUS); - } - - @Override - public void onTaskFinish() { - List uploadFiles = dataSource.get(currentDir - .getPath()); - for (UploadFile file : uploadFiles) { - if (file.file.getPath().equalsIgnoreCase( - item.file.getPath())) { - file.status = UploadFile.STATUS_FINISH; - file.progress = 100; - item.status = UploadFile.STATUS_FINISH; - file.progress = 100; - } - } - mHandler.sendEmptyMessage(UPDATE_SINGLE_UPLOAD_STATUS); - } - @Override public void onTaskCancel() { Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, "cancle ok"); } @Override - public void onTaskFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { - Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, - paramThrowable.toString()); - Log.d(com.ksyun.ks3.util.Constants.LOG_TAG, - response); + public void onTaskFailure(PutObjectRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { + if (clientException != null) { + Log.e(com.ksyun.ks3.util.Constants.LOG_TAG, clientException.getMessage()); + } + if (serviceException != null) { + Log.e(com.ksyun.ks3.util.Constants.LOG_TAG, serviceException.getResponse()); + } List uploadFiles = dataSource.get(currentDir .getPath()); for (UploadFile file : uploadFiles) { @@ -621,18 +590,16 @@ public class UploadActivity extends Activity implements OnItemClickListener { ObjectTagging objectTagging = new ObjectTagging(); objectTagging.addObjectTag("tagA", "A"); InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest( - bucketName, item.file.getName(),objectTagging); + bucketName, item.file.getName(), objectTagging); initiateMultipartUpload(request, item); } private void initiateMultipartUpload( final InitiateMultipartUploadRequest request, final UploadFile item) { client.initiateMultipartUpload(request, - new InitiateMultipartUploadResponceHandler() { + new InitiateMultipartUploadResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - InitiateMultipartUploadResult result) { + public void onSuccess(InitiateMultipartUploadRequest request, InitiateMultipartUploadResult result) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -650,9 +617,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { + public void onFailure(InitiateMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -663,7 +628,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(UPDATE_SINGLE_UPLOAD_STATUS); - Log.e("tag", "initiateMultipartUpload--onFailure---" + statesCode); + Log.e("tag", "initiateMultipartUpload--onFailure---" + serviceException.getStatusCode()); } }); } @@ -687,7 +652,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { if (requestFactory.hasMoreRequests()) { final UploadPartRequest request = requestFactory .getNextUploadPartRequest(); - client.uploadPart(request, new UploadPartResponceHandler() { + client.uploadPart(request, new UploadPartResponseHandler() { double progressInFile = 0; @Override @@ -717,8 +682,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } @Override - public void onSuccess(int statesCode, Header[] responceHeaders, - PartETag result) { + public void onSuccess(UploadPartRequest request, UploadPartResult result) { Message message = mHandler.obtainMessage(); message.what = UPLOAD_NEXT_PART; Bundle bundle = new Bundle(); @@ -727,13 +691,11 @@ public class UploadActivity extends Activity implements OnItemClickListener { message.setData(bundle); mHandler.sendMessage(message); - Log.e("tag", "uploadPart--onSuccess---" + statesCode); + Log.e("tag", "uploadPart--onSuccess---" + result.getStatusCode()); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable throwable) { + public void onFailure(UploadPartRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { List uploadFiles = dataSource.get(currentDir .getPath()); for (UploadFile file : uploadFiles) { @@ -746,7 +708,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(UPDATE_SINGLE_UPLOAD_STATUS); - Log.e("tag", "uploadPart--onFailure---" + statesCode); + Log.e("tag", "uploadPart--onFailure---" + serviceException.getStatusCode()); } }); } else { @@ -763,8 +725,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { private void listParts(final ListPartsRequest request, final UploadFile item) { client.listParts(request, new ListPartsResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders, - ListPartsResult result) { + public void onSuccess(ListPartsRequest request, ListPartsResult result) { Message message = mHandler.obtainMessage(); message.what = LIST_PART_FINISH; message.obj = result; @@ -772,14 +733,12 @@ public class UploadActivity extends Activity implements OnItemClickListener { bundle.putSerializable("uploadFile", item); message.setData(bundle); mHandler.sendMessage(message); - Log.e("tag", "listParts--onSuccess---" + statesCode); + Log.e("tag", "listParts--onSuccess---" + result.getStatusCode()); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { + public void onFailure(ListPartsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { List uploadFiles = dataSource.get(currentDir .getPath()); for (UploadFile file : uploadFiles) { @@ -790,7 +749,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(UPDATE_SINGLE_UPLOAD_STATUS); - Log.e("tag", "listParts--onFailure---" + statesCode); + Log.e("tag", "listParts--onFailure---" + serviceException.getStatusCode()); } }); } @@ -798,7 +757,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { private void abortUploadPart(AbortMultipartUploadRequest request, final UploadFile item) { client.abortMultipartUpload(request, new AbortMultipartUploadResponseHandler() { @Override - public void onSuccess(int statesCode, Header[] responceHeaders) { + public void onSuccess(AbortMultipartUploadRequest request, AbortMultipartUploadResult result) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -809,12 +768,11 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(0); - Log.e("tag", "completeMultipartUpload--onSuccess---" + statesCode); + Log.e("tag", "completeMultipartUpload--onSuccess---" + result.getStatusCode()); } @Override - public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, - String response, Throwable paramThrowable) { + public void onFailure(AbortMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -828,7 +786,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } mHandler.sendEmptyMessage(0); - Log.e("tag", "abortUploadPart--onFailure---" + statesCode); + Log.e("tag", "abortUploadPart--onFailure---" + serviceException.getStatusCode()); } }); } @@ -839,9 +797,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { client.completeMultipartUpload(request, new CompleteMultipartUploadResponseHandler() { @Override - public void onSuccess(int statesCode, - Header[] responceHeaders, - CompleteMultipartUploadResult result) { + public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -852,13 +808,11 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(0); - Log.e("tag", "completeMultipartUpload--onSuccess---" + statesCode); + Log.e("tag", "completeMultipartUpload--onSuccess---" + result.getStatusCode()); } @Override - public void onFailure(int statesCode, Ks3Error error, - Header[] responceHeaders, String response, - Throwable paramThrowable) { + public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) { List uploadFiles = dataSource .get(currentDir.getPath()); for (UploadFile file : uploadFiles) { @@ -871,7 +825,7 @@ public class UploadActivity extends Activity implements OnItemClickListener { } } mHandler.sendEmptyMessage(0); - Log.e("tag", "completeMultipartUpload--onFailure---" + statesCode); + Log.e("tag", "completeMultipartUpload--onFailure---" + serviceException.getStatusCode()); } }); } diff --git a/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Utils.java b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Utils.java new file mode 100644 index 0000000000000000000000000000000000000000..bde52a288850dd5c22c35d8fc242f2dbd6e3bfda --- /dev/null +++ b/ks3-android-sdk/demo/src/main/java/com/ks3/demo/main/Utils.java @@ -0,0 +1,34 @@ +package com.ks3.demo.main; + +import android.util.Log; + +import com.ksyun.ks3.model.result.GetObjectResult; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; + +public class Utils { + public static void saveToLocal (File file, GetObjectResult response) { + InputStream inputStream = response.getObject().getObjectContent(); + long length = response.getObject().getObjectMetadata().getContentLength(); + if (length > 0) { + byte[] buffer = new byte[(int)length]; + int readCount = 0; + while (readCount < length) { + try{ + readCount += inputStream.read(buffer, readCount, (int) length - readCount); + }catch (Exception e){ + Log.e("DownloadActivity", e.toString()); + } + } + try { + FileOutputStream fout = new FileOutputStream(file); + fout.write(buffer); + fout.close(); + } catch (Exception e) { + Log.e("DownloadActivity", e.toString()); + } + } + } +} diff --git a/ks3-android-sdk/demo/src/main/res/layout/alert_bucket_object_input.xml b/ks3-android-sdk/demo/src/main/res/layout/alert_bucket_object_input.xml index ef53768a0d872534c9dd7d40af8839394e9b57ae..0d79b3083c2cc4d476c1fcd84e7e66b04fcf86fe 100644 --- a/ks3-android-sdk/demo/src/main/res/layout/alert_bucket_object_input.xml +++ b/ks3-android-sdk/demo/src/main/res/layout/alert_bucket_object_input.xml @@ -1,7 +1,7 @@ + android:layout_height="200dp" >