2013-05-05 68 views
1

我需要從谷歌應用程序引擎運行的Java Web應用程序發送HTTP POST請求主人MediaFire REST API,在爲了上傳文件。的Java:發送POST HTTP請求,將文件上傳到主人MediaFire REST API

請參閱上傳功能文檔here(幾行)。

綜觀文檔和一些研究,我已經寫了下面的Java代碼,使相應的要求:

byte[] bytesData = //byte array with file data 

URL url = new URL("http://www.mediafire.com/api/upload/upload.php?" + 
        "session_token=" + sessionToken); 

//Configure connection 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setReadTimeout(60000); 

//Set headers 
conn.setRequestProperty("Content-Type", "application/octet-stream"); 
conn.setRequestProperty("x-filename", fileName); 
conn.setRequestProperty("x-filesize", fileSize); 
conn.setRequestProperty("x-filehash", sha256); 

//Write binary data 
System.out.println("\nWriting data..."); 
OutputStream out = conn.getOutputStream(); 
out.write(bytesData); 
out.flush(); 

//Check connection 
//if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { 
// throw new RuntimeException("FAILED!!! HTTP error code: " + 
//        conn.getResponseCode() + " --- " + 
//        conn.getResponseMessage()); 
//} 

//Get response 
System.out.println("\nGetting response..."); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

//Print response 
System.out.println("\nOutput from Server .... \n"); 
String output; 
while ((output = br.readLine()) != null) { 
    System.out.println(output); 
} 

但我沒有得到任何結果,只是:

Writing data... 
Getting response... 
Output from Server: 

如果我未評論//Check connection下的線,我得到一個Exception

java.lang.RuntimeException: FAILED!!! HTTP error code: 503 --- OK 

如果我改變Content-Type頭爲multipart/form-data我得到一個不同的Exception

java.lang.RuntimeException: FAILED!!! HTTP error code: 400 --- OK 

我不知道太多關於HTTP連接等和我不知道發生了什麼事......

想法

什麼可能進行的任何想法?


:我使用的是來自同一個應用程序的API的其他(GET)方法和他們完美的工作。

回答

0

HTTP錯誤代碼:400是用於壞請求的狀態代碼,這可能意味着服務器除了多部分/形式數據不確實,503代碼裝置的服務器過載,所以這種服務可以在不同的服務器上託管/將服務器上的線程連接到其他GET方法,這些方法可能會接收更多流量。