Giter Site home page Giter Site logo

aliyun-oss-android-sdk's Introduction

Alibaba Cloud OSS SDK for Android

Introduction

This document mainly describes how to install and use the OSS Android SDK. This document assumes that you have already activated the Alibaba Cloud OSS service and created an AccessKeyID and an AccessKeySecret. In the document, ID refers to the AccessKeyID and KEY indicates the AccessKeySecret. If you have not yet activated or do not know about the OSS service, log on to the OSS Product Homepage for more help.

Environment requirements

  • Android 2.3 or above
  • You must have registered an Alibaba Cloud account with the OSS activated.

Installation

OSS Android SDK is dependent on OkHttp.

You can introduce the downloaded JAR package into the project, or you can use it through the Maven dependency.

Introduce the JAR package directly

After you download the OSS Android SDK ZIP package, perform the following steps (applicable to Android Studio and Eclipse):

  • On the official website, click to view details to download the SDK package
  • Unzip the SDK package in the libs directory to obtain the following JAR packages: aliyun-oss-sdk-android-2.3.0.jar, okhttp-3.x.x.jar and okio-1.x.x.jar
  • Import the three JAR packages to the libs directory of the project

Gradle via JCenter

compile 'com.aliyun.dpa:oss-android-sdk:+'

Compile the JAR package from the source code

You can run the gradle command for packaging after cloning the project source code:

# Clone the project
$ git clone https://github.com/aliyun/aliyun-oss-android-sdk.git

# Enter the directory
$ cd aliyun-oss-android-sdk/

# Run the packaging script. JDK 1.7 is required
$ ./gradlew releaseJar

# Enter the directory generated after packaging and the JAR package will be generated in this directory
$ cd build/libs && ls

Javadoc

Click to view details.

Configure permissions

The following are the Android permissions needed by the OSS Android SDK. Please make sure these permissions are already set in your AndroidManifest.xml file. Otherwise, the SDK will not work normally.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

Descriptions of synchronous interfaces and asynchronous interfaces in the SDK

Because network requests cannot be processed on the UI thread in mobile development scenarios, many interfaces of the SDK support synchronous and asynchronous calls to handle requests. After being called, the synchronous interface block other requests while waiting for the returned results, whereas the asynchronous interface imports a callback function in the request to return the request processing results.

The UI thread does not support synchronous interface calls. ClientException or ServiceException will be thrown in the event of an exception. ClientException indicates a local exception, such as a network exception or invalid parameters. ServiceException indicates a service exception returned by the OSS, such as an authentication failure or a server error.

When an exception occurs during asynchronous request processing, the exception will be handled by a callback function.

When an asynchronous interface is called, the function will return a task directly. You can cancel the task, wait till the task is finished, or obtain results directly. For example, you can

OSSAsyncTask task = oss.asyncGetObject(...);

task.cancel(); // Cancel the task

task.waitUntilFinished(); // Wait till the task is finished

GetObjectResult result = task.getResult(); // Block other requests and wait for the returned results

Quick start

The basic object upload and download processes are demonstrated below. For details, you can refer to the following directories of this project:

The test directory: click to view details

or

the sample directory: click to view details.

Step-1. Initialize the OSSClient

We recommend STS authentication mode to initialize the OSSClient on mobile. For details about authentication, refer to the Access Control section.

String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

//if null , default will be init
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // connction time out default 15s
conf.setSocketTimeout(15 * 1000); // socket timeout,default 15s
conf.setMaxConcurrentRequest(5); // synchronous request number,default 5 
conf.setMaxErrorRetry(2); // retry,default 2
OSSLog.enableLog(); //write local log file ,path is SDCard_path\OSSLog\logs.csv

OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");

OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);

Step-2. Upload a file

Suppose you already have a bucket in the OSS console. You can use the following code to upload a local file to OSS:

// Construct an upload request
PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");

// You can set progress callback during asynchronous upload
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
	@Override
	public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
		Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
	}
});

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
	@Override
	public void onSuccess(PutObjectRequest request, PutObjectResult result) {
		Log.d("PutObject", "UploadSuccess");
	}

	@Override
	public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
		// Request exception
		if (clientExcepion != null) {
			// Local exception, such as a network exception
			clientExcepion.printStackTrace();
		}
		if (serviceException != null) {
			// Service exception
			Log.e("ErrorCode", serviceException.getErrorCode());
			Log.e("RequestId", serviceException.getRequestId());
			Log.e("HostId", serviceException.getHostId());
			Log.e("RawMessage", serviceException.getRawMessage());
		}
	}
});

// task.cancel(); // Cancel the task

// task.waitUntilFinished(); // Wait till the task is finished

Step-3. Download a specified object

The following code downloads the specified object (you need to handle the input stream of the returned data):

// Construct an object download request
GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");

OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
	@Override
	public void onSuccess(GetObjectRequest request, GetObjectResult result) {
		// Request succeeds
		Log.d("Content-Length", "" + getResult.getContentLength());

		InputStream inputStream = result.getObjectContent();

		byte[] buffer = new byte[2048];
		int len;

		try {
			while ((len = inputStream.read(buffer)) != -1) {
				// Process the downloaded data
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
		// Request exception
		if (clientExcepion != null) {
			// Local exception, such as a network exception
			clientExcepion.printStackTrace();
		}
		if (serviceException != null) {
			// Service exception
			Log.e("ErrorCode", serviceException.getErrorCode());
			Log.e("RequestId", serviceException.getRequestId());
			Log.e("HostId", serviceException.getHostId());
			Log.e("RawMessage", serviceException.getRawMessage());
		}
	}
});

// task.cancel(); // Cancel the task

// task.waitUntilFinished(); // Wait till the task is finished as needed

Complete documentation

The SDK provides advanced upload, download, resumable upload/download, object management and bucket management features. For details, see the complete official documentation: click to view details

License

  • Apache License 2.0.

Contact us

aliyun-oss-android-sdk's People

Contributors

1019272778 avatar baiyubin2020 avatar binghaiwang avatar chenjie1979 avatar duan007a avatar github1019272778 avatar huiguangjun avatar imliujun avatar luozhang002 avatar qixu001 avatar sdlcdhc avatar sducodemonkey avatar wlll129 avatar wushuai1415 avatar xuyecan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aliyun-oss-android-sdk's Issues

上传可不可以不使用SDK进行上传动作

现在我们公司为了考虑安全问题,客户端不能得到acessKey 和 临时签名
现在下载的方法 通过重定向进行下载,客户端不知晓 acessKey 和相关信息
但是上传遇到问题,上传是不是也可以重定向

只是创建OSSClient而已却 一直轮询打印 Closing expired connections Closing connections idle longer than 60000 MILLISECONDS

default
[DEBUG] [2018-04-09 18:51:10] org.apache.http.impl.conn.PoolingHttpClientConnectionManager.closeExpiredConnections(PoolingHttpClientConnectionManager.java:408) Closing expired connections
[DEBUG] [2018-04-09 18:51:10] org.apache.http.impl.conn.PoolingHttpClientConnectionManager.closeIdleConnections(PoolingHttpClientConnectionManager.java:401) Closing connections idle longer than 60000 MILLISECONDS
这样合适吗

Explicit termination method 'close' not called

初始化SDK时,检测到有资源泄露问题
image

具体代码:

public static long getLogFileSize(File file) {
        long size = 0;
        if (file != null && file.exists()) {
            try {
                FileInputStream fis = new FileInputStream(file);
                size = (long)fis.available();
            } catch (Exception e) {
                log(Log.ERROR, e.toString());
            }
        }
        return size;
    }

获取文件长度使用 FileInputStream.available() 后没有关闭 FileInputStream

而对于读取文件大小使用 FileInputStream.available() 方法的一些弊端网上也是一堆的博客介绍。
我觉得此处使用 File.length() 完全可以满足需求。如果必须用流式方法建议加上关闭流的操作。

另外针对本地日志系统,我觉得可以参考其他第三方SDK一样,需要在初始化之前调用是否开启日志打印方法,如果不开启日志打印就不用初始化日志文件了。

OSSCompletedCallback多次回调的问题

当设置了失败重试次数以后,OSSCompletedCallback的onFailure会回调多次,这样就没法判断是最终失败了还是重试里面的某一次失败了,请问有什么好的办法吗?

上传失败

W/System.err: com.alibaba.sdk.android.oss.ClientException: File descriptor closed
W/System.err: [ErrorMessage]: File descriptor closed
W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:166)
W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:215)
W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:215)
W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:36)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: java.io.IOException: File descriptor closed
W/System.err: at libcore.io.Posix.readBytes(Native Method)
W/System.err: at libcore.io.Posix.read(Posix.java:147)
W/System.err: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:230)
W/System.err: at libcore.io.IoBridge.read(IoBridge.java:472)
W/System.err: at java.io.FileInputStream.read(FileInputStream.java:177)
W/System.err: at okio.Okio$2.read(Okio.java:139)
W/System.err: at com.alibaba.sdk.android.oss.network.ProgressTouchableRequestBody.writeTo(ProgressTouchableRequestBody.java:59)
W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:62)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)

SignatureDoesNotMatch 求教是神原因啊

                                                               <Error>
                                                                 <Code>SignatureDoesNotMatch</Code>
                                                                 <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
                                                                 <RequestId>582192E82444BF734B40C2A2</RequestId>
                                                                 <HostId>xxx</HostId>
                                                                 <OSSAccessKeyId>zk8nfO0CwDzG3saq</OSSAccessKeyId>
                                                                 <SignatureProvided>dEPZSd7GlWsRY9XS+zyYShTbeiU=</SignatureProvided>
                                                                 <StringToSign>PUT
                                                               
                                                               image/jpg
                                                               Tue, 08 Nov 2016 08:55:03 GMT

OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider("xxx", "xxxxx");
keyid 和key 都是从服务器获取的,但是每次都是SignatureDoesNotMatch,写成阿里云给我的那一套 keyid 和keysercert也不行

new OSSClient导致线程数增多

有些情况下是根据Request不同来设置不同的鉴权方式的,现在sdk的做法是按OSSClient来设置鉴权,导致需要采用不同的鉴权方式的时候需要new新的OSSClient,这样会导致又生成了新的一个线程池,new的OSSClient越多的时候,应用产生的线程数量不就越多了吗。

这个问题能不能参照一下AsyncTask,在sdk内部把线程池设置成static的,甚至还可以在OSSClient的构造函数里面传入自己的线程池(sdk也可以提供一个默认static的线程池供开发者引用)

OSSCustomSignerCredentialProvider的接口方法signContent返回content字符串中,其中md5一项中如果含有空格的话,而oss签名的时候将空格处理成+,这点不知是个bug还是个坑

我们用的php的后台,在自签名的时候,content字符串中其中md5校验值并不会将空格处理成+,而我试了把md5中的空格处理成+号后,签名就是对的,所以oss应该也是把md5中的空格处理成+号,还是说oss-android-sdk在返回的md5有问题?

上传失败问题

使用asyncResumableUpload上传设置setDeleteUploadOnCancelling为false,在上传过程中断开网络(部分上传,上传请求会死掉,无任何响应),此时调用task的cancel,再次发起上传请求,
出现ClientException("The uploading file is inconsistent with before"),

在Android中上传图片报错”java.net.ProtocolException: unexpected end of stream“

我在安卓中使用了OSS服务,我是先将android的bitmap格式转化为byte格式再进行上传,但是发生了错误。
我的调用代码如下所示:

// OSSClient只初始化了一次
credentialProvider = new OSSPlainTextAKSKCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
client = new OSSClient(getApplicationContext(), ENDPOINT, credentialProvider);

try {
                String object_key = FOLDER + "camera_img.jpg";
                PutObjectRequest put = new PutObjectRequest(BUCKET_NAME, object_key, byteArray);
                System.out.println("PutObjectRequest这里出现了问题????");

                PutObjectResult putResult = client.putObject(put);
                Log.d("PutObject", "UploadSuccess");
                Log.d("ETag", putResult.getETag());
                Log.d("RequestId", putResult.getRequestId());

                // ###########################################
                // 保存上传图片的文件路径
                img_url = "https://tf-img-classifier.oss-cn-shanghai.aliyuncs.com/camera_img.jpg";
                System.out.println("---------------->成功!");

                flag = 1;
            } catch (ClientException e) {
                // 本地异常如网络异常等
                e.printStackTrace();
                System.out.println("---------------->失败!");
            } catch (ServiceException e) {
                // 服务异常
                Log.e("RequestId", e.getRequestId());
                Log.e("ErrorCode", e.getErrorCode());
                Log.e("HostId", e.getHostId());
                Log.e("RawMessage", e.getRawMessage());
                System.out.println("---------------->异常!");
            }
            if(flag == 1){
                // ##################################################
                // 4.1号添加
                // Mqtt发布到broker中去
                //mqttHelper.publishMessage(img_url);
                try {
                    MqttClient sampleClient = new MqttClient(mqttHelper.serverUri, mqttHelper.clientId, null);
                    //sampleClient.setCallback(new MyMqttCallback());

                    // 创建连接选择
                    MqttConnectOptions connOpts = getMqttConnectOptions(mqttHelper.username,mqttHelper.password);
                    System.out.println("Connecting to broker: "+mqttHelper.serverUri);

                    sampleClient.connect(connOpts);
                    System.out.println("Connected");

                    //sampleClient.subscribe(mqttHelper.publishTopic);

                    //在另一个线程中发送消息
                    Thread thread = new Thread(() -> {
                        try {
                            publishMsg(mqttHelper.publishTopic, img_url, sampleClient);
                        } catch (MqttException e) {
                            e.printStackTrace();
                        }
                    });
                    thread.start();

                    thread.join();
                    //断开服务连接
                    sampleClient.disconnect();
                    System.out.println("Disconnected");
                } catch (MqttException me) {
                    System.out.println("reason "+me.getReasonCode());
                    System.out.println("msg "+me.getMessage());
                    System.out.println("loc "+me.getLocalizedMessage());
                    System.out.println("cause "+me.getCause());
                    System.out.println("excep "+me);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

报错信息如下:

W/oss-android-api: type=1400 audit(0.0:426): avc: denied { write } for name="perfd" dev="mmcblk2p18" ino=1318 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:shell_data_file:s0 tclass=dir permissive=0
W/oss-android-api: type=1400 audit(0.0:427): avc: denied { write } for name="perfd" dev="mmcblk2p18" ino=1318 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:shell_data_file:s0 tclass=dir permissive=0
W/System.err: java.net.ProtocolException: unexpected end of stream
W/System.err:     at okhttp3.internal.http.Http1xStream$FixedLengthSink.close(Http1xStream.java:294)
W/System.err:     at okio.RealBufferedSink.close(RealBufferedSink.java:236)
W/System.err:     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:48)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at com.android.tools.profiler.agent.okhttp.OkHttp3Interceptor.intercept(OkHttp3Interceptor.java:52)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
W/System.err:     at okhttp3.RealCall.execute(RealCall.java:60)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:174)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W/System.err:     at java.lang.Thread.run(Thread.java:764)
W/System.err: java.net.ProtocolException: unexpected end of stream
W/System.err:     at okhttp3.internal.http.Http1xStream$FixedLengthSink.close(Http1xStream.java:294)
W/System.err:     at okio.RealBufferedSink.close(RealBufferedSink.java:236)
W/System.err:     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:48)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at com.android.tools.profiler.agent.okhttp.OkHttp3Interceptor.intercept(OkHttp3Interceptor.java:52)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
W/System.err:     at okhttp3.RealCall.execute(RealCall.java:60)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:174)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:243)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W/System.err:     at java.lang.Thread.run(Thread.java:764)
W/System.err: com.alibaba.sdk.android.oss.ClientException: unexpected end of stream
W/System.err: [ErrorMessage]: unexpected end of stream
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:197)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:243)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:243)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W/System.err:     at java.lang.Thread.run(Thread.java:764)
W/System.err: Caused by: java.net.ProtocolException: unexpected end of stream
W/System.err:     at okhttp3.internal.http.Http1xStream$FixedLengthSink.close(Http1xStream.java:294)
W/System.err:     at okio.RealBufferedSink.close(RealBufferedSink.java:236)
W/System.err:     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:48)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at com.android.tools.profiler.agent.okhttp.OkHttp3Interceptor.intercept(OkHttp3Interceptor.java:52)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
W/System.err:     at okhttp3.RealCall.execute(RealCall.java:60)
W/System.err:     at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:174)
W/System.err: 	... 7 more

这个问题已经困扰我好几天了,请麻烦解决一下,谢谢!

好像okhttp包冲突

2.10的用了OKhttp 但是别的也用了okhttp怎么办?
compile 'com.facebook.fresco:imagepipeline-okhttp:0.8.0'
这个是fresco的库 然后报错
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 2
请问应该怎么解决

但是compile 'com.aliyun.dpa:oss-android-sdk:1.4.0'这个和compile 'com.facebook.fresco:imagepipeline-okhttp:0.8.0'无错

报InvalidPartOrder

把MultipartUploadSamples里面的方法移植过来用,all task Success! 但是 [StatusCode]: 400, [Code]: InvalidPartOrder, [Message]: The list of parts was not in ascending order. Parts list must specified in order by part number

设备时间与自然时间不一致导致OSSFederationCredentialProvider失常

现象:
1.上传序列与token获取先后顺序毫无关联,有时先token有时先上传
2.不管啊是异步上传还是同步上传,状况如1
3.即使采用同步的方式先获取token,然后设置OSSStsTokenCredentialProvider,最后在上传,情况如1

报错如下:
`RawMessage:

<title>400 Bad Request</title>

400 Bad Request

Your browser sent a request that this server could not understand.


Powered by AliyunOSS `

上传失败的概率很高

不知道是什么原因,今天上传文件失败率很高,超过百分之五十的失败率。

clientException != null,clientException.getMessage()为null
serviceException != null

上传下载Callback缺少set方法

由于公司APP业务原因,我们的上传是开启Service进行上传的,期间可以会切换到不同的界面,在不同的界面callback的逻辑是不一样的(更新不同的界面什么的),这就导致我们需要有callbadk的setter/getter方法,这事比较紧急,我们的文件存储已经全部迁移到阿里OSS上面了,以前的服务器已经关了,所以希望可以尽快提供callbadk的setter/getter方法,谢谢!

endpoint 问题

endpoint设置为http://on.image.com/image格式时。
请求地址为什么要设置http://on.image.com/+“objectkey”格式

`String originHost = endpoint.getHost();

    // If it'd not a CName or it's in the CName exclude list, the host should be prefixed with the bucket name.
    if (!OSSUtils.isCname(originHost) && bucketName != null) {
        originHost = bucketName + "." + originHost;
    }

    String urlHost = null;
    if (isHttpDnsEnable()) {
        urlHost = HttpdnsMini.getInstance().getIpByHostAsync(originHost);
    } else {
        OSSLog.logDebug("[buildCannonicalURL], disable httpdns");
    }

    // The urlHost is null when the asynchronous DNS resolution API never returns IP.
    if (urlHost == null) {
        urlHost = originHost;
    }

    String headerHost = originHost;
    if (OSSUtils.isCname(originHost) && this.isInCustomCnameExcludeList() && bucketName != null) {
        headerHost = bucketName + "." + originHost;
    }

    addHeader(OSSHeaders.HOST, headerHost);

    baseURL = scheme + "://" + urlHost;
    if (objectKey != null) {
        baseURL += "/" + HttpUtil.urlEncode(objectKey, OSSConstants.DEFAULT_CHARSET_NAME);
    }`

InvalidAccessKeyId过期后再次上传文件问题

用过期的InvalidAccessKeyId上传文件,失败后重新请求InvalidAccessKeyId等参数再次提交还是提交失败,失败信息如下

InvalidAccessKeyId
The OSS Access Key Id you provided does not exist in our records.
5A603C11F1C42E8EF6CE2631
evcard.oss-cn-shanghai.aliyuncs.com
fdg3gr3evfdbgfdnbvxczvZgt4hg4ert

已添加混淆代码,但是混淆后上传失败!日志如下,很急!!!

java.lang.IllegalStateException: Compute signature failed!
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:319)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.signRequest(OSSUtils.java:560)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:158)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: Stub!
at org.apache.a.a.a.a.a(Base64.java:8)
at com.alibaba.sdk.android.oss.common.utils.BinaryUtil.toBase64String(BinaryUtil.java:21)
at com.alibaba.sdk.android.oss.common.auth.HmacSHA1Signature.computeSignature(HmacSHA1Signature.java:47)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:316)
... 7 more
java.lang.IllegalStateException: Compute signature failed!
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:319)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.signRequest(OSSUtils.java:560)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:158)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:287)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: Stub!
at org.apache.a.a.a.a.a(Base64.java:8)
at com.alibaba.sdk.android.oss.common.utils.BinaryUtil.toBase64String(BinaryUtil.java:21)
at com.alibaba.sdk.android.oss.common.auth.HmacSHA1Signature.computeSignature(HmacSHA1Signature.java:47)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:316)
... 8 more
com.alibaba.sdk.android.oss.ClientException: Compute signature failed!
[ErrorMessage]: Compute signature failed!
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:241)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:287)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:287)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:44)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalStateException: Compute signature failed!
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:319)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.signRequest(OSSUtils.java:560)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:158)
... 7 more
Caused by: java.lang.RuntimeException: Stub!
at org.apache.a.a.a.a.a(Base64.java:8)
at com.alibaba.sdk.android.oss.common.utils.BinaryUtil.toBase64String(BinaryUtil.java:21)
at com.alibaba.sdk.android.oss.common.auth.HmacSHA1Signature.computeSignature(HmacSHA1Signature.java:47)
at com.alibaba.sdk.android.oss.common.utils.OSSUtils.sign(OSSUtils.java:316)
... 9 more

请问一下自签名模式的细节

String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

credentialProvider = new OSSCustomSignerCredentialProvider() {
@OverRide
public String signContent(String content) {
return "OSS " + AccessKeyId + ":" + base64(hmac-sha1(AccessKeySecret, content));
}
};

OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
我想试试本地算法实现,
把里面的两个key设置成自己的key 上传会报错:SignatureDoesNotMatch
用明文的new OSSPlainTextAKSKCredentialProvider("", "");就没有问题

一个建议,放个精简的不带gradle的下载吧

SDK 80多M有点大啊,发现里面放了gradle3.3 汗。
主要是github的下载也不是完全流畅的(原因你懂的),用浏览器下不了因为失败就重新开始了。
用迅雷也失败了5次,还好有续传。
我相信我的网络不会是最糟糕的

retrofit2.0 okhttp冲突

你好,使用retrofit2.0,okhttp报错:
image

我都把okhttp和okio的依赖都删了,还是报这个错,这个怎么弄额?

org.xml.sax.SAXParseException: Unexpected end of document

不知道为什么时不时会报这个错,而图片就没传成功:
11-16 16:12:42.227 W/System.err(20928): org.xml.sax.SAXParseException: Unexpected end of document
11-16 16:12:42.228 W/System.err(20928): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:125)
11-16 16:12:42.228 W/System.err(20928): at com.alibaba.sdk.android.oss.internal.ResponseParsers.parseResponseErrorXML(ResponseParsers.java:580)
11-16 16:12:42.228 W/System.err(20928): at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:182)
11-16 16:12:42.228 W/System.err(20928): at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:36)
11-16 16:12:42.228 W/System.err(20928): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-16 16:12:42.228 W/System.err(20928): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
11-16 16:12:42.228 W/System.err(20928): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
11-16 16:12:42.228 W/System.err(20928): at java.lang.Thread.run(Thread.java:761)

code:
``

        val task = oss.asyncPutObject(put, object : OSSCompletedCallback<PutObjectRequest, PutObjectResult> {
            override fun onFailure(request: PutObjectRequest, clientException: ClientException, serviceException: ServiceException) {

                Log.d("xxx", "onFailure: " + serviceException)
            }

            override fun onSuccess(request: PutObjectRequest, result: PutObjectResult) {

                Log.d("xxx", "onSuccess:" + result)
            }
        })

``

总是会出现超时如何解决

[2018-03-08 20:10:13] - request---------------------
request url=http://timehut-cn-sz.oss-cn-shenzhen.aliyuncs.com/sz/videos/original/201803/1082316/767efc8fd5da47bab04b4838ce34f6aa53e86e347eb89244655e4ee690721812.mp4
request params=uploadId=0FD19F85D77542E3B70AA23CA85805F2&partNumber=9
requestHeader [Authorization]: OSS STS.EYh2SX4fX1b8YHVaaAtNa7Bop:Xah6wr03zbTvDBclCs5Lq8x/GiM=
requestHeader [User-Agent]: aliyun-sdk-android/2.7.3(Linux/Android 8.0.0/VKY-AL00;HUAWEIVKY-AL00)
requestHeader [Host]: timehut-cn-sz.oss-cn-shenzhen.aliyuncs.com
requestHeader [x-oss-security-token]: CAIS8QF1q6Ft5B2yfSjIpJrdeens2bl5hqDTW27nhWEUeMFN2IfEkjz2IHpMe3NqAu0ftvQxnWlY7P4flq5vSppIRVHYNSSRYFGftVHPWZHInuDox55m4cTXNAr+Ihr/29CoEIedZdjBe/CrRknZnytou9XTfimjWFrXWv/gy+QQDLItUxK/cCBNCfpPOwJms7V6D3bKMuu3OROY6Qi5TmgQ41An1DMns//jn5TAsUKA0meXkLFF+97DRbG/dNRpMZtFVNO44fd7bKKp0lQLsUAVrv0t0fUcqWme54HHWwRLgAidPvCR78VrKwZ1dlqk3njmOgiWGoABdwY0oI0f/9QRjff5wnachI3PI7sg6WVK2XXKGox41DLizZmB4tYQDhmKg0k8eOlcbtxu/XBXR/82xWLEY/yE0SnJJ8fA68QzJKV33U5gCy3vNlLrSs2zd4UsBH8KSYGB6Hx2t542hHKtHlkHuE3Scrf6KfyLmrqmoK9Mo0fPLrE=
requestHeader [Date]: Thu, 08 Mar 2018 12:10:13 GMT
requestHeader [Content-MD5]: vybBAKm/7DGciDcoJRlBmQ==
requestHeader [Content-Type]: video/mp4

------>end of log

[2018-03-08 20:10:44] - Encounter local execpiton: java.net.SocketTimeoutException: timeout
------>end of log

crash_time:2018-03-08 20:10:44
com.alibaba.sdk.android.oss.ClientException: timeout
[ErrorMessage]: timeout
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:190)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:43)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:784)
Caused by: java.net.SocketTimeoutException: timeout
at okio.Okio$4.newTimeoutException(Okio.java:230)
at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
at okhttp3.RealCall.execute(RealCall.java:77)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:167)
... 5 more
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.read(SocketInputStream.java:203)
at java.net.SocketInputStream.read(SocketInputStream.java:139)
at okio.Okio$2.read(Okio.java:139)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
... 25 more
------>end of log

[2018-03-08 20:10:44] - shouldRetry - com.alibaba.sdk.android.oss.ClientException: timeout
[ErrorMessage]: timeout
------>end of log

[2018-03-08 20:10:44] - [run] - retry, retry type: OSSRetryTypeShouldRetry
------>end of log

我们发现每天总是有不少用于遇到超时问题,不管是国内还是国外,同一套代码之前用七牛和S3都不会有问题,切换到阿里云之后就经常各种超时。用的最新SDK2.7.3。

断点续传失败

已在阿里云的工单系统中沟通,非必现bug,之前也出现过这种情况
有一个文件无法上传,删除记录断点续传文件后,能够正常上传
失败日志如下:
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: java.io.IOException: Invalid int: "null"
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:275)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:262)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:314)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:54)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Thread.run(Thread.java:818)
03-15 10:32:02.034 19642-19829/com.camory.cloudcamera.china W/System.err: Caused by: java.lang.NumberFormatException: Invalid int: "null"
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.invalidInt(Integer.java:138)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.parseInt(Integer.java:358)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.parseInt(Integer.java:334)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.valueOf(Integer.java:525)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers.parseListPartsResponseXML(ResponseParsers.java:329)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers.access$400(ResponseParsers.java:49)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:267)
03-15 10:32:02.035 19642-19829/com.camory.cloudcamera.china W/System.err: ... 7 more
03-15 10:32:02.070 19642-19829/com.camory.cloudcamera.china W/System.err: java.io.IOException: Invalid int: "null"
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:275)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:262)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:314)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:328)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:54)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Thread.run(Thread.java:818)
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: Caused by: java.lang.NumberFormatException: Invalid int: "null"
03-15 10:32:02.071 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.invalidInt(Integer.java:138)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.parseInt(Integer.java:358)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.parseInt(Integer.java:334)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at java.lang.Integer.valueOf(Integer.java:525)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers.parseListPartsResponseXML(ResponseParsers.java:329)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers.access$400(ResponseParsers.java:49)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: at com.alibaba.sdk.android.oss.internal.ResponseParsers$ListPartsResponseParser.parse(ResponseParsers.java:267)
03-15 10:32:02.072 19642-19829/com.camory.cloudcamera.china W/System.err: ... 8 more

x-oss-security-token

OSSUtils.class
headersToSign.put(lowerKey, header.getValue().trim());
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference

InvalidAccessKeyId 过期后再次提交问题

你好如果首次提交时InvalidAccessKeyId 不合法(其他参数正常),报错信息如下

InvalidAccessKeyId
The OSS Access Key Id you provided does not exist in our records.
5A5F1BC32A8F223E5E7353AD
evcard.oss-cn-shanghai.aliyuncs.com
fdg3gr3evfdbgfdnbvxczvZgt4hg4ert

如果这时我重新请求InvalidAccessKeyId等信息后,再次提交文件(参数均是新的)还是一直报上面的错误信息,这个时候需要手动把APP杀掉之后才能正常提交文件,检查代码后本地代码没有缓存任何关于InvalidAccessKeyId等参数。

请问sdk是不是对手机做了类似安全验证的东西

debug包没问题,release包有问题

App中集成了BugTags, 我把BugTags的部分功能禁用了,请教下有没有更好的解决方法。
crash_time:2018-01-25 15:44:59
com.alibaba.sdk.android.oss.ClientException: read failed: EBADF (Bad file descriptor)
[ErrorMessage]: read failed: EBADF (Bad file descriptor)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:190)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:236)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:236)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:43)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.io.IOException: read failed: EBADF (Bad file descriptor)
at libcore.io.IoBridge.read(IoBridge.java:513)
at java.io.FileInputStream.read(FileInputStream.java:177)
at okio.Okio$2.read(Okio.java:139)
at com.alibaba.sdk.android.oss.network.ProgressTouchableRequestBody.writeTo(ProgressTouchableRequestBody.java:59)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:62)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)
at okhttp3.RealCall.execute(RealCall.java:69)
at io.bugtags.agent.instrumentation.okhttp3.CallExtension.execute(CallExtension.java:43)
at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:167)
... 7 more
Caused by: android.system.ErrnoException: read failed: EBADF (Bad file descriptor)
at libcore.io.Posix.readBytes(Native Method)
at libcore.io.Posix.read(Posix.java:169)
at libcore.io.BlockGuardOs.read(BlockGuardOs.java:230)
at libcore.io.IoBridge.read(IoBridge.java:503)
... 27 more

上传超时问题

android sdk调用asyncResumableUpload上传文件,在上传过程中断开网络,没有失败的回调,并且在恢复网络后,请求也没有任何反应(没有成功,也没有失败),这个问题很不解

okHttp版本

麻烦能不能尽快升级至okhttp:3.0.1呢,我们项目也是依赖于okHttp,并准备升级至最新版。谢谢。

超时错误:

11-03 18:11:05.906 16598-16710/com.vigourbox.vbox:PublishUploadService I/System.out: [CDS]EAGAIN in Recvfrom
11-03 18:11:05.907 16598-16710/com.vigourbox.vbox:PublishUploadService I/System.out: [CDS]read byte is 0
11-03 18:11:05.908 16598-16718/com.vigourbox.vbox:PublishUploadService I/System.out: [CDS]close[38512]
11-03 18:11:05.912 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: java.net.SocketTimeoutException: timeout
11-03 18:11:05.918 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.Okio$4.newTimeoutException(Okio.java:227)
11-03 18:11:05.918 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:284)
11-03 18:11:05.918 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:240)
11-03 18:11:05.918 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:67)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okhttp3.RealCall.execute(RealCall.java:63)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:213)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at com.alibaba.sdk.android.oss.network.OSSRequestTask.call(OSSRequestTask.java:39)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-03 18:11:05.919 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.lang.Thread.run(Thread.java:818)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: Caused by: java.net.SocketTimeoutException
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:497)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:42)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:242)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.Okio$2.read(Okio.java:138)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:236)
11-03 18:11:05.920 16598-16710/com.vigourbox.vbox:PublishUploadService W/System.err: ... 25 more
11-03 18:11:05.932 16598-16710/com.vigourbox.vbox:PublishUploadService I/System.out: [CDS]rx timeout:15000

混淆问题

您好,没有找到混淆相关说明,请问该如何混淆呢?

Glide 加载图片失败.

Glide.with(context).load(ImageUtils.getUrl(user.getImgUrl())).dontAnimate().error(R.drawable.pic_head_gray).into(civHead)
加载显示不出来,

[2.x] 怎么设置Bucket/Object的ACL

1.4版本可以通过Bucket.setBucketACL("public-read")来设置ACL,2.x里没有找到对应方法。
如果不设置ACL,PutObject的默认ACL是什么?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.