diff --git a/.classpath b/.classpath
index 921c7314f..9c865fb75 100644
--- a/.classpath
+++ b/.classpath
@@ -12,8 +12,7 @@
-
-
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 60105c1b9..4ede96d8a 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,2 @@
eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/src/main/java/com/qiniu/api/auth/digest/Mac.java b/src/main/java/com/qiniu/api/auth/digest/Mac.java
index 1fa681789..246614b73 100644
--- a/src/main/java/com/qiniu/api/auth/digest/Mac.java
+++ b/src/main/java/com/qiniu/api/auth/digest/Mac.java
@@ -29,7 +29,6 @@ public Mac(String accessKey, String secretKey) {
* @throws AuthException
*/
public String sign(byte[] data) throws AuthException {
- System.out.println("data : " + new String(data));
javax.crypto.Mac mac = null;
try {
mac = javax.crypto.Mac.getInstance("HmacSHA1");
diff --git a/src/main/java/com/qiniu/api/io/IoApi.java b/src/main/java/com/qiniu/api/io/IoApi.java
index 181b37402..405af81c0 100644
--- a/src/main/java/com/qiniu/api/io/IoApi.java
+++ b/src/main/java/com/qiniu/api/io/IoApi.java
@@ -5,6 +5,7 @@
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
+import java.util.Map;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
@@ -38,6 +39,7 @@ private static PutRet put(String uptoken, String key, File file,
AbstractContentBody fileBody = buildFileBody(file, extra);
requestEntity.addPart("file", fileBody);
setKey(requestEntity, key);
+ setParam(requestEntity, extra.params);
if (extra.checkCrc != NO_CRC32) {
if (extra.crc32 == 0) {
return new PutRet(new CallRet(400, new Exception("no crc32 specified!")));
@@ -68,6 +70,15 @@ private static void setKey(MultipartEntity requestEntity, String key) throws Uns
}
}
+ private static void setParam(MultipartEntity requestEntity, Map params) throws UnsupportedEncodingException{
+ if(params == null){
+ return;
+ }
+ for(String name : params.keySet()){
+ requestEntity.addPart(name, new StringBody(params.get(name),Charset.forName("utf-8")));
+ }
+ }
+
private static PutRet putStream(String uptoken, String key, InputStream reader,PutExtra extra) {
MultipartEntity requestEntity = new MultipartEntity();
try {
@@ -75,6 +86,7 @@ private static PutRet putStream(String uptoken, String key, InputStream reader,P
AbstractContentBody inputBody = buildInputStreamBody(reader, extra, key);
requestEntity.addPart("file", inputBody);
setKey(requestEntity, key);
+ setParam(requestEntity, extra.params);
if (extra.checkCrc != NO_CRC32) {
if (extra.crc32 == 0) {
return new PutRet(new CallRet(400, new Exception("no crc32 specified!")));
diff --git a/src/test/java/com/qiniu/testing/IOTest.java b/src/test/java/com/qiniu/testing/IOTest.java
index b9c8ab062..74b37f92f 100644
--- a/src/test/java/com/qiniu/testing/IOTest.java
+++ b/src/test/java/com/qiniu/testing/IOTest.java
@@ -1,6 +1,10 @@
package com.qiniu.testing;
import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.json.JSONObject;
import junit.framework.TestCase;
@@ -44,16 +48,33 @@ public void setUp() {
// just upload an image in testdata.
public void testPut() throws Exception {
- String uptoken = new PutPolicy(bucketName).token(mac);
+ // must start with "x:"
+ String xname = "x:test_name";
+ String xvalue = "test_value";
+ String name = "nonxtest_name";
+ String value = "nonxtest_value";
+
+ PutPolicy putPolicy = new PutPolicy(bucketName);
+ putPolicy.returnBody = "{\"hash\":\"$(etag)\",\"key\":\"$(key)\",\"fsize\":\"$(fsize)\",\""+xname+"\":\"$("+xname+")\",\""+name+"\":\"$("+name+")\"}";
+ String uptoken = putPolicy.token(mac);
+
String dir = System.getProperty("user.dir");
String localFile = dir + "/testdata/" + "logo.png";
PutExtra extra = new PutExtra();
+ Map params = new HashMap();
+ params.put(xname, xvalue);
+ params.put(name, value);
+ extra.params = params;
PutRet ret = IoApi.putFile(uptoken, key, localFile, extra);
assertTrue(ret.ok());
assertTrue(expectedHash.equals(ret.getHash()));
+ JSONObject jsonObject = new JSONObject(ret.response);
+ assertEquals(xvalue, getJsonValue(jsonObject, xname));
+ assertEquals(null, getJsonValue(jsonObject, name));
+
//test stream upload
{
String str="Hello,Qiniu";
@@ -61,6 +82,23 @@ public void testPut() throws Exception {
ret = IoApi.Put(uptoken, key2, stream, extra);
assertTrue(ret.ok());
assertTrue(expectedHash2.equals(ret.getHash()));
+
+ jsonObject = new JSONObject(ret.response);
+ assertEquals(xvalue, getJsonValue(jsonObject, xname));
+ assertEquals(null, getJsonValue(jsonObject, name));
+ }
+ }
+
+ private String getJsonValue(JSONObject jsonObject, String name){
+ try{
+ String value = jsonObject.getString(name);
+ // 针对使用returnBody情况
+ if("null".equalsIgnoreCase(value)){
+ return null;
+ }
+ return value;
+ }catch(Exception e){
+ return null;
}
}