diff --git a/README.md b/README.md
index 08871a8..45cd920 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@
cn.ucloud.ufile
ufile-client-java
- 2.5.2
+ latest-release-version
```
@@ -36,7 +36,7 @@
/*
* your other dependencies
*/
- implementation 'cn.ucloud.ufile:ufile-client-java:2.5.2'
+ implementation 'cn.ucloud.ufile:ufile-client-java:latest-release-version'
}
```
diff --git a/ufile-sample-java/pom.xml b/ufile-sample-java/pom.xml
index d35b011..7fc5223 100644
--- a/ufile-sample-java/pom.xml
+++ b/ufile-sample-java/pom.xml
@@ -55,7 +55,7 @@
cn.ucloud.ufile
ufile-client-java
- 2.5.2
+ 2.6.0
diff --git a/ufile-sample-java/src/main/java/cn/ucloud/ufile/sample/object/PutObjectSample.java b/ufile-sample-java/src/main/java/cn/ucloud/ufile/sample/object/PutObjectSample.java
index bc9c0c5..27d1dcc 100644
--- a/ufile-sample-java/src/main/java/cn/ucloud/ufile/sample/object/PutObjectSample.java
+++ b/ufile-sample-java/src/main/java/cn/ucloud/ufile/sample/object/PutObjectSample.java
@@ -29,14 +29,14 @@ public class PutObjectSample {
private static final String TAG = "PutObjectSample";
private static ObjectConfig config = new ObjectConfig("cn-sh2", "ufileos.com");
- public static void main(String[] args) {
+ public static void main(String[] args) throws FileNotFoundException {
InputStream is = new ByteArrayInputStream(new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07});
// 如果上传File,则文件的MimeType可以使用MimeTypeUtil.getMimeType(File)来获取,MimeTypeUtil可能支持的type类型不全,用户可以按需自行填写
File file = new File("");
String keyName = "";
String bucketName = "";
String mimeType = MimeTypeUtil.getMimeType(keyName);
- putStream(is, mimeType, keyName, bucketName);
+ putStream(new FileInputStream(file), file.length(), mimeType, keyName, bucketName);
}
public static void putFile(File file, String mimeType, String nameAs, String toBucket) {
@@ -176,7 +176,7 @@ public void onError(Request request, ApiError error, UfileErrorBean response) {
});
}
- public static void putStream(InputStream stream, String mimeType, String nameAs, String toBucket) {
+ public static void putStream(InputStream stream, long contentLength, String mimeType, String nameAs, String toBucket) {
try {
/**
* 上传回调策略
@@ -187,7 +187,7 @@ public static void putStream(InputStream stream, String mimeType, String nameAs,
.addCallbackBody(new PolicyParam("key", "value"))
.build();
PutObjectResultBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
- .putObject(stream, mimeType)
+ .putObject(stream, contentLength, mimeType)
.nameAs(nameAs)
.toBucket(toBucket)
/**
@@ -244,7 +244,7 @@ public void onProgress(long bytesWritten, long contentLength) {
}
}
- public static void putStreamAsync(InputStream stream, String mimeType, String nameAs, String toBucket) throws UfileClientException {
+ public static void putStreamAsync(InputStream stream, long contentLength, String mimeType, String nameAs, String toBucket) throws UfileClientException {
/**
* 上传回调策略
* 必须填写回调接口url(目前仅支持http,不支持https),可选填回调参数,回调参数请自行决定是否需要urlencode
@@ -254,7 +254,7 @@ public static void putStreamAsync(InputStream stream, String mimeType, String na
.addCallbackBody(new PolicyParam("key", "value"))
.build();
UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
- .putObject(stream, mimeType)
+ .putObject(stream, contentLength, mimeType)
.nameAs(nameAs)
.toBucket(toBucket)
/**
diff --git a/ufile/pom.xml b/ufile/pom.xml
index 1c11b23..7a7223a 100644
--- a/ufile/pom.xml
+++ b/ufile/pom.xml
@@ -7,7 +7,7 @@
cn.ucloud.ufile
ufile
pom
- 2.5.2
+ 2.6.0
ufile-core
@@ -95,6 +95,15 @@
org.apache.maven.plugins
maven-deploy-plugin
${plugin.maven.deploy.version}
+
+
+ default-deploy
+ deploy
+
+ deploy
+
+
+
diff --git a/ufile/ufile-client-java/apidocs.zip b/ufile/ufile-client-java/apidocs.zip
index c593545..12c0360 100644
Binary files a/ufile/ufile-client-java/apidocs.zip and b/ufile/ufile-client-java/apidocs.zip differ
diff --git a/ufile/ufile-client-java/pom.xml b/ufile/ufile-client-java/pom.xml
index 3a599e9..1ff33bf 100644
--- a/ufile/ufile-client-java/pom.xml
+++ b/ufile/ufile-client-java/pom.xml
@@ -6,11 +6,11 @@
ufile
cn.ucloud.ufile
- 2.5.2
+ 2.6.0
ufile-client-java
- 2.5.2
+ 2.6.0
@@ -26,7 +26,7 @@
cn.ucloud.ufile
ufile-core
- 2.5.2
+ 2.6.0
diff --git a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/UfileClient.java b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/UfileClient.java
index 2cea9a5..430cd5f 100644
--- a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/UfileClient.java
+++ b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/UfileClient.java
@@ -83,15 +83,6 @@ public Config setHttpClientConfig(HttpClient.Config httpClientConfig) {
}
}
- /**
- * 设置HttpClient异步线程池
- *
- * @param executorService HttpClient异步线程池
- */
- @Deprecated
- public static void setExecutorService(ExecutorService executorService) {
- }
-
/**
* 配置并构建UfileClient
* 必须在调用bucket()和object()之前调用,否则无效
@@ -103,18 +94,6 @@ public synchronized static UfileClient configure(Config config) {
return createClient(config);
}
- /**
- * 获取HttpClient异步线程池
- *
- * @return HttpClient异步线程池
- */
- @Deprecated
- public static ExecutorService getExecutorService() {
- if (mInstance == null)
- return null;
- return mInstance.httpClient.getExecutorService();
- }
-
/**
* 获取UfileClient配置项
*
diff --git a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/GetStreamApi.java b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/GetStreamApi.java
index b3f50b7..7419cf1 100644
--- a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/GetStreamApi.java
+++ b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/GetStreamApi.java
@@ -189,6 +189,7 @@ public DownloadStreamBean parseHttpResponse(Response response) throws UfileIOExc
long contentLength = response.body().contentLength();
result.setContentLength(contentLength);
result.setContentType(response.header("Content-Type"));
+ result.setContentMD5(response.header("Content-MD5"));
result.seteTag(response.header("ETag") == null ?
null : response.header("ETag").replace("\"", ""));
@@ -213,7 +214,6 @@ public DownloadStreamBean parseHttpResponse(Response response) throws UfileIOExc
InputStream is = response.body().byteStream();
if (outputStream == null) {
result.setInputStream(is);
- FileUtil.close(response.body());
} else {
if (onProgressListener != null) {
switch (progressConfig.type) {
diff --git a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/ObjectApiBuilder.java b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/ObjectApiBuilder.java
index 314c984..98367c6 100644
--- a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/ObjectApiBuilder.java
+++ b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/ObjectApiBuilder.java
@@ -100,13 +100,14 @@ public PutFileApi putObject(File file, String mimeType) {
/**
* put 流
*
- * @param inputStream 输入流
- * @param mimeType mime类型
+ * @param inputStream 输入流
+ * @param contentLength 输入流的数据长度,bytesLength
+ * @param mimeType mime类型
* @return {@link PutStreamApi}
*/
- public PutStreamApi putObject(InputStream inputStream, String mimeType) {
+ public PutStreamApi putObject(InputStream inputStream, long contentLength, String mimeType) {
return new PutStreamApi(authorizer, objectConfig, client.getHttpClient())
- .from(inputStream, mimeType);
+ .from(inputStream, contentLength, mimeType);
}
/**
diff --git a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/PutStreamApi.java b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/PutStreamApi.java
index 42ab3b8..3ab5ac5 100644
--- a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/PutStreamApi.java
+++ b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/api/object/PutStreamApi.java
@@ -63,7 +63,15 @@ public class PutStreamApi extends UfileObjectApi {
private ProgressConfig progressConfig;
- private ByteArrayOutputStream cacheOutputStream;
+ /**
+ * 上传流的数据长度
+ */
+ private long contentLength = 0L;
+
+ /**
+ * 上传流的md5,若withVerifyMd5,则必须填写
+ */
+ private String contentMD5;
/**
* 流写入的buffer大小,Default = 256 KB
@@ -117,12 +125,14 @@ public PutStreamApi nameAs(String keyName) {
/**
* 设置要上传的流和MIME类型
*
- * @param inputStream 输入流
- * @param mimeType MIME类型
+ * @param inputStream 输入流
+ * @param contentLength 输入流的数据长度,bytesLength
+ * @param mimeType MIME类型
* @return {@link PutStreamApi}
*/
- public PutStreamApi from(InputStream inputStream, String mimeType) {
+ public PutStreamApi from(InputStream inputStream, long contentLength, String mimeType) {
this.inputStream = inputStream;
+ this.contentLength = contentLength;
this.mimeType = mimeType;
this.mediaType = MediaType.parse(mimeType);
return this;
@@ -150,15 +160,16 @@ public PutStreamApi withIopCmd(String iopCmd) {
return this;
}
-
/**
* 设置是否需要MD5校验
*
* @param isVerifyMd5 是否校验MD5
+ * @param contentMD5 数据的MD5值,若 isVerifyMd5 = true,则必须填写非空的 contentMD5
* @return {@link PutStreamApi}
*/
- public PutStreamApi withVerifyMd5(boolean isVerifyMd5) {
+ public PutStreamApi withVerifyMd5(boolean isVerifyMd5, String contentMD5) {
this.isVerifyMd5 = isVerifyMd5;
+ this.contentMD5 = contentMD5;
return this;
}
@@ -259,7 +270,6 @@ protected void prepareData() throws UfileClientException {
parameterValidat();
String contentType = mediaType.toString();
- String contentMD5 = "";
String date = dateFormat.format(new Date(System.currentTimeMillis()));
String url = generateFinalHost(bucketName, keyName);
@@ -274,7 +284,7 @@ protected void prepareData() throws UfileClientException {
.addHeader("Date", date)
.mediaType(mediaType);
- builder.addHeader("Content-Length", String.valueOf(inputStream.available()));
+ builder.addHeader("Content-Length", String.valueOf(contentLength));
if (storageType != null)
builder.addHeader("X-Ufile-Storage-Class", storageType);
@@ -292,15 +302,10 @@ protected void prepareData() throws UfileClientException {
}
}
+ if (contentMD5 == null)
+ contentMD5 = "";
if (isVerifyMd5) {
- try {
- backupStream();
- contentMD5 = HexFormatter.formatByteArray2HexString(Encoder.md5(new ByteArrayInputStream(cacheOutputStream.toByteArray())), false);
- builder.addHeader("Content-MD5", contentMD5);
- inputStream = new ByteArrayInputStream(cacheOutputStream.toByteArray());
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
+ builder.addHeader("Content-MD5", contentMD5);
}
String authorization = authorizer.authorization((ObjectOptAuthParam) new ObjectOptAuthParam(HttpMethod.PUT, bucketName, keyName,
@@ -311,11 +316,7 @@ protected void prepareData() throws UfileClientException {
builder.params(inputStream);
builder.setProgressConfig(progressConfig);
- FileUtil.close(cacheOutputStream);
-
call = builder.build(httpClient.getOkHttpClient());
- } catch (IOException e) {
- throw new UfileIOException(e.getMessage());
} catch (UfileClientException e) {
throw e;
}
@@ -344,23 +345,6 @@ protected void parameterValidat() throws UfileParamException {
"The required param 'bucketName' can not be null or empty");
}
- private void backupStream() {
- cacheOutputStream = new ByteArrayOutputStream();
- byte[] buff = new byte[128 << 10];
- int len = 0;
- try {
- while ((len = inputStream.read(buff)) > 0) {
- cacheOutputStream.write(buff, 0, len);
- }
-
- cacheOutputStream.flush();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- FileUtil.close(inputStream);
- }
- }
-
private OnProgressListener onProgressListener;
/**
diff --git a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/bean/DownloadStreamBean.java b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/bean/DownloadStreamBean.java
index 158fb4b..f032d07 100644
--- a/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/bean/DownloadStreamBean.java
+++ b/ufile/ufile-client-java/src/main/java/cn/ucloud/ufile/bean/DownloadStreamBean.java
@@ -20,10 +20,12 @@ public class DownloadStreamBean extends BaseResponseBean {
private String contentType;
@SerializedName("Content-Length")
private long contentLength;
+ @SerializedName("Content-MD5")
+ private String contentMD5;
@SerializedName("InputStream")
private InputStream inputStream;
- private transient Map metadatas;
+ private transient Map metadatas;
public String getContentType() {
return contentType;
@@ -61,11 +63,20 @@ public DownloadStreamBean setInputStream(InputStream inputStream) {
return this;
}
- public Map getMetadatas() {
+ public String getContentMD5() {
+ return contentMD5;
+ }
+
+ public DownloadStreamBean setContentMD5(String contentMD5) {
+ this.contentMD5 = contentMD5;
+ return this;
+ }
+
+ public Map getMetadatas() {
return metadatas;
}
- public void setMetadatas(Map metadatas) {
+ public void setMetadatas(Map metadatas) {
this.metadatas = metadatas;
}
diff --git a/ufile/ufile-core/apidocs.zip b/ufile/ufile-core/apidocs.zip
index f4bc806..0a12119 100644
Binary files a/ufile/ufile-core/apidocs.zip and b/ufile/ufile-core/apidocs.zip differ
diff --git a/ufile/ufile-core/pom.xml b/ufile/ufile-core/pom.xml
index 690022e..0072dc1 100644
--- a/ufile/ufile-core/pom.xml
+++ b/ufile/ufile-core/pom.xml
@@ -6,11 +6,11 @@
cn.ucloud.ufile
ufile
- 2.5.2
+ 2.6.0
ufile-core
- 2.5.2
+ 2.6.0
diff --git a/ufile/ufile-core/src/main/java/cn/ucloud/ufile/UfileConstants.java b/ufile/ufile-core/src/main/java/cn/ucloud/ufile/UfileConstants.java
index 597b900..09e8aca 100644
--- a/ufile/ufile-core/src/main/java/cn/ucloud/ufile/UfileConstants.java
+++ b/ufile/ufile-core/src/main/java/cn/ucloud/ufile/UfileConstants.java
@@ -6,7 +6,7 @@
* @date: 2018/11/22 15:00
*/
public class UfileConstants {
- public static final String SDK_VERSION = "2.5.2";
+ public static final String SDK_VERSION = "2.6.0";
/**
* 默认分片大小(4MB)
*/
diff --git a/ufile/ufile-core/src/main/java/cn/ucloud/ufile/http/HttpClient.java b/ufile/ufile-core/src/main/java/cn/ucloud/ufile/http/HttpClient.java
index 3ecbcb3..44874f3 100644
--- a/ufile/ufile-core/src/main/java/cn/ucloud/ufile/http/HttpClient.java
+++ b/ufile/ufile-core/src/main/java/cn/ucloud/ufile/http/HttpClient.java
@@ -20,12 +20,6 @@
*/
public class HttpClient {
protected String TAG = getClass().getSimpleName();
- @Deprecated
- public static final long DEFAULT_CONNECT_TIMEOUT = 10 * 1000;
- @Deprecated
- public static final long DEFAULT_WRITE_TIMEOUT = 30 * 1000;
- @Deprecated
- public static final long DEFAULT_READ_TIMEOUT = 30 * 1000;
/**
* 原始OkHttpClient,全局保持唯一一个,从而保证性能开销
@@ -221,17 +215,6 @@ public HttpClient(Config config) {
mOkHttpClient = builder.build();
}
-
- /**
- * 获取 HttpClient异步线程池
- *
- * @return HttpClient异步线程池
- */
- @Deprecated
- public synchronized ExecutorService getExecutorService() {
- return this.mOkHttpClient.dispatcher().executorService();
- }
-
public Config getConfig() {
return config;
}