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