GithubHelp home page GithubHelp logo

aliyun-oss-java-sdk's Introduction

Aliyun OSS SDK for Java

GitHub version Build Status

The Aliyun OSS SDK for Java enables Java developers to easily work with Aliyun OSS. You can get started in minutes using Maven or by downloading a single zip file.

Requirements

  • Java 1.6 or later
  • Maven

Install

The recommended way to use the Aliyun OSS SDK for Java in your project is to consume it from Maven. Import as follows:

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>

See the Setup section of the SDK Reference for more information about installing the SDK through other means.

Build

Once you check out the code from GitHub, you can build it using Maven. Use the following command to build:

mvn clean install -DskipTests

Authors

License

Apache License 2.0

aliyun-oss-java-sdk's People

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  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

aliyun-oss-java-sdk's Issues

分片上传回调

hi, 这里面有没有关于分片上传的回调的demo,在completeMultipartUpload中添加callback,我发现调用completeMultipartUpload后的返回是个CompleteMultipartUploadResult,这里面完全都没有是否调用成功的信息和我web服务器返回的给客户端的参数。

Unsupported algorithm: HmacSHA1

试过将jre ext包下面的sunjce_provider.jarcopy到tomcat下,也看到过java.security文件,已经配置上了。

支持FastJson

希望aliyun-sdk-oss支持fastjson,现在依赖的json-lib已经好久没更新了。

阿里云 OSS Java SDK 对 JDOM 1.1 版本的引用会阻止 maven bundle 插件工作

阿里云 OSS Java SDK 引用了 JDOM 1.1 版本(2008年9月发布)
这个依赖库由于在默认包(root package)下有类,导致 maven-bundle-plugin 打包 jar 时出错:

The default package '.' is not permitted by the Import-Package syntax

这会使得引用阿里云 Java SDK 开发者无法正常使用 maven 打包自己的 jar。

JDOM 1.1.2、1.1.3 (分别于2011年11月、2012年12月发布)移除了默认包下的类。
JDOM 最新的版本是 2.0.6,www.jdom.org 上建议更新到最新版本。(Apache Maven 上能找到的最新版本是 2.0.2)
已经确认,在 pom 文件中强制引用 1.1.3 会临时解决此问题。

建议更新 JDOM 的引用版本修正此问题,版本升级攻略 https://github.com/hunterhacker/jdom/wiki/JDOM2-Migration-Issues。

参考:
http://stackoverflow.com/questions/33395100/the-default-package-is-not-permitted-by-the-import-package-syntax
https://techotom.wordpress.com/2014/10/21/fixing-the-default-package-is-not-permitted-by-the-import-package-syntax-with-maven-bundle-plugin/

多线程并发调用,导致死锁

多线程同时调用时,会导致死锁,在httpClient连接池的地方。at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138) at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306) at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64) at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192) at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185) at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113) at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121) at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67) at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111) at com.aliyun.oss.internal.OSSBucketOperation.listObjects(OSSBucketOperation.java:410) at com.aliyun.oss.OSSClient.listObjects(OSSClient.java:498) at com.aliyun.oss.OSSClient.listObjects(OSSClient.java:492) at cn.archbox.file.dao.AliyunBaseDao.listObjectSummary(AliyunBaseDao.java:235)

aliyun-oss-java-sdk 2.1.0

Connect to repositories.oss-cn-shenzhen-internal.aliyuncs.com:80 [repositories.oss-cn-shenzhen-internal.aliyuncs.com/100.100.0.8] failed: Cannot assign requested address

失败后不能重连

ossclient 分片上传问题

分片上传OSSclient 目前好像只支持单例模式,ossClient 不能复用。
1,示例下的MultipartUploadSample这个类中,调用了线程池

private static ExecutorService executorService = Executors.newFixedThreadPool(5);
声明为全局变量
如果ossclient为单例,那么

/*
             * Waiting for all parts finished
             */
            executorService.shutdown();
            while (!executorService.isTerminated()) {
                try {
                    executorService.awaitTermination(5, TimeUnit.SECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

这段代码逻辑就有问题了。并发条件下,线程池的线程非一个用户在使用
eg:
比如A用途提交了10M的文件正好2个分片,B用户提交了10M的文件,正好2个分片。假设A的2个分片先上传好了,B的正在上传。那么这个时候A还在等待线程池的所有线程执行完毕。这个地方觉得不合理了。
如果说把线程池放在方法内,作为方法的局部变量,那么频换的创建和销毁线城市,是否不妥?
以上是个人的理解,还请赐教

分片上传中对已编码好的Callback参数的设置

1,我这边的测试代码
`
String jsonStr = "授权信息从服务器获取的json";
JSONObject json = JSON.parseObject(jsonStr);
String endpoin = "http://" + json.get("region").toString() + ".aliyuncs.com";
String accessKeyId = json.get("accessKeyId").toString();
String accessKeySecret = json.get("accessKeySecret").toString();
String bucketName = json.get("bucket").toString();
String objectKey = json.get("objectKey").toString();
String stsToken = json.get("stsToken").toString();
String callback = json.get("callback").toString();
String callbackVar = json.get("callbackVar").toString();

OSSClient ossClient = new OSSClient(endpoin, accessKeyId, accessKeySecret, stsToken);

try {
  UploadFileRequest uploadFileRequest = new UploadFileRequest(bucketName, objectKey);
  uploadFileRequest.setUploadFile("d:/mysql.msi");
  uploadFileRequest.setTaskNum(5);
  uploadFileRequest.setPartSize(1024 * 1024);
  uploadFileRequest.setEnableCheckpoint(true);

  uploadFileRequest.addHeader(OSSHeaders.OSS_HEADER_CALLBACK, callback);
  uploadFileRequest.addHeader(OSSHeaders.OSS_HEADER_CALLBACK_VAR, callbackVar);

  UploadFileResult uploadResult = ossClient.uploadFile(uploadFileRequest);

  CompleteMultipartUploadResult multipartUploadResult = uploadResult.getMultipartUploadResult();

  System.out.println(multipartUploadResult);
  Thread.sleep(30000L);

} catch (Throwable e) {
  e.printStackTrace();
} finally {
  ossClient.shutdown();
}`
  1. 我的场景
    分片上传中的callback参数从服务端获取到,并且是已经按照oss要求base64加密了的(可以理解为熟肉),因此按照Oss的Http api文档,我只需在在请求Header里面设置x-oss-callback 和 x-oss-callback-var 对应的值即可。但对于回调数据,sdk中必须设置request的callback对象(生肉)才行(uploadFileRequest.setCallback(callback)),直接在uploadFileRequest添加回调Header是无效的,因此我必须先解码服务端返回的callback内容,再解析后创建对应的Callback对象传递给uploadFileRequest。
    ===== 以下是sdk中 completeMultipartUploadRequest对callback的获取代码
    CompleteMultipartUploadRequest completeUploadRequest = new CompleteMultipartUploadRequest( uploadFileRequest.getBucketName(), uploadFileRequest.getKey(), uploadCheckPoint.uploadID, uploadCheckPoint.partETags); completeUploadRequest.setCallback(uploadFileRequest.getCallback());

  2. 我的期望(可能也是大家的期望)
    callback相关的数据都是由相应的文件管理服务器创建和编码返回,对于各语言平台的sdk应该在上传文件时提供一个对已编码好的callback数据(熟肉)的设置 api [抱拳]

listObjects 是否支持按修改时间排序?

目前的层级是 4*1000的目录结构
如下
000999/.../../000999

目前有一个场景是需要把 某一段时间写入的object拿出来(写入之后就不会动了)
是否支持这样的排序查找操作?

httpclient 未对服务端证书做校验

com.aliyun.oss.common.comm.DefaultServiceClient
createHttpClientConnectionManager() 方法初始化的sslContext绕过了服务端证书的校验,不会形成中间人攻击吗

通过OSS-SDK获得的文件流,在没有完全读完的情况下不能关闭。

当处理大文件的时候,有时只需要读取部分数据,或者根据读取数据内容来判断是否继续往下读取。这时,可能没有读完整个流的情况下就已经完成了业务操作。需要关闭流,这时流不能被关闭,线程会被卡住。
已经在钉钉内和@李文兆 @鸣镝沟通了,建议提供一个类似forceClose()的方法。
下面是卡住线程的堆栈信息:

Stack trace: 
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
java.net.SocketInputStream.read(SocketInputStream.java:170)
java.net.SocketInputStream.read(SocketInputStream.java:141)
org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:200)
org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128)
org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
java.io.FilterInputStream.close(FilterInputStream.java:181)
com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147)
cn.mucang.oort.transfer.action.api.open.OSSFileAction.get(OSSFileAction.java:137)  
...

图片无法保存

	GetObjectRequest request = new GetObjectRequest(bucketName, objName);
	request.setProcess(resizeStyle);
	
	try{
		ossClient.getObject(request, new File(newObjName));
	}catch(OSSException oe){
		System.out.println("Error Message: " + oe.getErrorCode()+oe.getErrorMessage());
	}
	catch(ClientException ce){
                   System.out.println("Error Message: " + ce.getErrorCode()+ce.getErrorMessage());
	}
	catch (Throwable e){
                    System.out.println("Error Message: " + e.getMessage());
            }

调用该方法后,无任何报错,但是到新的指定目录下,没有生成相应的文件

Caused by: java.net.SocketException: Connection reset 不知道什么原因?

Exception in thread "main" com.aliyun.oss.ClientException: SocketException
at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:128)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123)
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68)
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:149)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113)
at com.aliyun.oss.internal.OSSObjectOperation.writeObjectInternal(OSSObjectOperation.java:674)
at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:134)
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:554)
at com.yovenny.girlhunter.util.OSSClientHelper.upload(OSSClientHelper.java:48)
at com.yovenny.girlhunter.upload.UploadMain.upload(UploadMain.java:63)
at com.yovenny.girlhunter.upload.UploadMain.main(UploadMain.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:154)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.net.www.MeteredStream.read(MeteredStream.java:134)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3336)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.aliyun.oss.common.comm.io.ChunkedInputStreamEntity$ReleasableInputStreamEntity.writeTo(ChunkedInputStreamEntity.java:147)
at com.aliyun.oss.common.comm.io.ChunkedInputStreamEntity.writeTo(ChunkedInputStreamEntity.java:87)
at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:158)
at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:162)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:122)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:125)
... 16 more

具体代码:

public static void buildClient(){
if(client==null) client= new OSSClient(endpoint, accessKeyId, accessKeySecret);
}

//上传网络流
public static void upload(String url,String key){
    buildClient();
    if(isUpload) {
        // Object是否存在
        boolean found = client.doesObjectExist(bucketName, key);
        if(found)return;
        InputStream inputStream ;
        try {
            inputStream = new URL(url).openStream();
            PutObjectRequest putObjectRequest=new PutObjectRequest(bucketName, key, inputStream)
                    .withProgressListener(new PutObjectProgressListener());
            client.putObject(putObjectRequest);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("----------------upload error:"+url);
        }
    }
}

断点续传会报错

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:797)
简单上传可以使用

设计一致性原则【谁分配谁释放】

OSSObject里封装了一个InputStream,建议OSSObject实现一下Closeable接口,在close方法的实现里把这个InputStream关一下,以免上层调用者忘记关闭导致资源泄漏。

UploadFileRequest不支持UploadProgressListener?

UploadFileRequest时添加UploadProgressListener,但是没有看到相关进度的回调。文件是上传成功了。

UploadFileRequest uploadFileRequest = new UploadFileRequest("nsvod", "data/60_1.mp4");
uploadFileRequest.setUploadFile("/usr/local/var/www/vod/file/60_1.mp4");
uploadFileRequest.setTaskNum(1);
uploadFileRequest.setPartSize(2 * 1024 * 1024);
uploadFileRequest.setEnableCheckpoint(true);
uploadFileRequest.setProgressListener(new UploadProgressListener());
UploadFileResult uploadResult = ossClient.uploadFile(uploadFileRequest);

创建直播对象,检查oss控制台,无直播推流对象文件夹生成

ossClient.putObject(bucketName, "ggggg/", new ByteArrayInputStream(new byte[0]));
 CreateLiveChannelRequest createLiveChannelRequest = new CreateLiveChannelRequest(
	                    bucketName, “hello”);
	            ossClient.createLiveChannel(createLiveChannelRequest);

第一行能够执行成功,在oss的bucket中生成“ggggg”对象文件夹,这个只是测试用,顺序执行完,不报任何错误,但是oss的buket里面没有“hello”直播推流文件夹生成。
分别用oss 2.4.0和2.4.1版本,都不行

整点上传失败!

通过OSSClient的putObject上传文件,如果上传的时候正好是整点,比如,10:00:00或14:00:00,上传的时候没有出现异常,但实际上文件并没有保存在OSS上,非整点的时候没有出现这个问题。

使用V2.4.0 或 V2.5.0,都有这个问题。

希望能再sdk里加上 上传整个文件夹的方法

public void uploadFolder(String key,File file){
	 List<File> files = new LinkedList<File>();
	 listFiles(file, files);
	 int startingPosition = file.getAbsolutePath().length();
	 for (File file2 : files) {
		 putObject(key+file2.getAbsolutePath()
                 .substring(startingPosition)
                 .replaceAll("\\\\", "/"),file2);
	}
	 
}
 private void listFiles(File dir, List<File> results) {
        File[] found = dir.listFiles();
        if ( found != null ) {
            for ( File f : found ) {
                if (f.isDirectory()) {
                	listFiles(f, results);
                } else {
                    results.add(f);
                }
            }
        }
    }

2.2.1版本OSSObjectOperation中getObject返回未正常关闭套接字导致CLOSE_WAIT

oss sdk v2.2.1中
com.aliyun.oss.internal.OSSObjectOperation中
public OSSObject getObject(GetObjectRequest getObjectRequest) 方法内部没有将Stream关闭,
外部调用获取到OSSObject后,若不显式地对object进行getContent再关闭,则会导致套接字保持CLOSE_WAIT状态

使用v2.0.1版本时并无此问题,因为方法内部将response安全关闭

断点续传添加上传进度条插件不起作用

```
// 设置断点续传请求
		UploadFileRequest uploadFileRequest = new UploadFileRequest(bucketName, key);
		uploadFileRequest.withProgressListener(new FileUploadProgressListener());
控制台不打印上传进度的信息

ConcurrentGetObjectSample.java利用范围下载实现的并发下载,报错

采用的示例:
https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/samples/ConcurrentGetObjectSample.java?spm=5176.doc32009.2.44.hBawdj&file=ConcurrentGetObjectSample.java

错误信息:
org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 1048577; received: 525114
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.aliyun.oss.event.ProgressInputStream.read(ProgressInputStream.java:116)
at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:82)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.luoq.oss.ConcurrentGetObjectSample$BlockFetcher.run(ConcurrentGetObjectSample.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

setProxy无法使用

用户使用proxy时发现会报NullPointer错误,代码中发现DefaultServiceClient的成员this.credentialsProvider没有初始化。
另外缺少proxy的测试case。

bug 提交

在测试使用该SDK 时发现几个bug

当 put 时 Object 的key 为 “” (空字符串)时,会抛出IndexOutOfBoundException 在 OSSUtil 的98行
当 put 时 设置Content-Length 大于inputStream内容的实际长度,会导致IO阻塞,之后抛出session连接超时异常。

meta.setExpirationTime 没有起作用

我设置了 过期时间,但貌似没有起作用.我在阿里云后台查看 object数据,发现一直没有 过期.
代码如下,寻找帮助 : )

OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(bytes.length);
meta.setExpirationTime(new Date(new Date().getTime() + expirationLong*1000));
PutObjectResult result = client.putObject(BUCKET_NAME, kvKey, bi, meta);

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.