2012-02-09 37 views
0

私はRapidshareにファイルをJavaでAPIを使ってアップロードしようとしています。しかし、私は立ち往生しています。私の問題は、自分のAPIがアップロードしたファイルのプロパティ名などを知らないことだと思います。アップロードされて完全に送信されたようですが、その後はアカウントにファイルがありません。投稿データHttpUrlConnectionを使用したJava

私は私がここで見つけたもので、私のコードをベースとしました:http://www.experts-exchange.com/Programming/Languages/Java/Q_20370019.html

任意のヘルプ場合は、私はPHPとカールを使用してソリューションを作成することに成功したが、最終的な解決策は、Javaでなければなりません。

$post = array(
    'sub'   => 'upload', 
    'login'  => $user, 
    'password' => $pass, 
    'filecontent' => '@'. $filepath 
); 

$c = curl_init(); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($c, CURLOPT_URL, 'https://rs'. $server .'.rapidshare.com/cgi-bin/rsapi.cgi'); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, $post); 
$info = curl_exec($c); 
curl_close($c); 

私のJavaソース:

package main; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class Main { 
    public static void main(String args[]) throws Exception { 
     String url = "http://rs"+ getServerId() +".rapidshare.com/cgi-bin/rsapi.cgi?sub=upload&login=***&password=***"; 
     String docPath = "/Users/***/Downloads/a.jpg"; // Document 

     HttpURLConnection httpcon = (HttpURLConnection) ((new URL(url).openConnection())); 
     httpcon.setDoOutput(true); 
     httpcon.setUseCaches(false); 
     httpcon.setRequestProperty("Content-Type", "multipart/form-data"); 
     httpcon.connect(); 

     System.out.println("Posting " +docPath +"..."); 
     File file = new File(docPath); 
     FileInputStream is = new FileInputStream(file); 
     OutputStream os = httpcon.getOutputStream(); 

     // POST 
     // Read bytes until EOF to write 
     byte[] buffer = new byte[4096]; 
     int bytes_read; // How many bytes in buffer 
     while((bytes_read = is.read(buffer)) != -1) { 
      os.write(buffer, 0, bytes_read); 
     } 
     os.close(); 
     is.close(); 

     System.out.println("Done..."); 
    } 

    private static int getServerId() throws NumberFormatException, IOException { 
     HttpURLConnection httpUrlConnection = (HttpURLConnection) new URL(
       "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver") 
       .openConnection(); 
     httpUrlConnection.connect(); 
     InputStreamReader in = new InputStreamReader(
       (InputStream) httpUrlConnection.getContent()); 

     BufferedReader buff = new BufferedReader(in); 

     return Integer.parseInt(buff.readLine()); 
    } 
} 
+0

ようにそれを使用することができます。 – Jivings

+0

は私のJavaソース –

+0

btwを追加しました。エラーは: "エラー:サブルーチンが無効です。(b6ba5d82)"ですが、ファイルが見つからないと思います。 –

答えて

0

私は私のプロジェクトのために以下のクラスを使用していました。 http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/

GETおよびPOST要求をサポートしています。

あなたはあまりにもあなたのJavaを表示する必要が

RestClient client = new RestClient(your_url); 
client.AddParam("sub", "upload"); 
//Other parameters here 

try { 
    client.Execute(RequestMethod.POST); 
} catch (Exception e) {} 
+0

スピードやパーセンテージなどを表示する可能性がなくなってしまいますか? –