0

呼び出そうとしているWebサービスがあります:

次の Curl コマンドはそのために機能します

    curl -F fa=c.apiupload -F sessiontoken=EA3237F922644115A0F7DB75D0AE388F -F destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC -F filedata=@/Users/cpinera/tmp/panda2.jpg -F zip_extract=1 -F metadata=1 -F meta_img_description="This is a very nice panda" -F meta_img_keywords="panda,happy panda" http://domain.com/razuna/raz1/dam/index.cfm

しかし、RESTFul API にアクセスするために HttpURLConnection として生成した同等の URL は、次のようにはなりません。

 http://domain.com/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken=F46D2226463C4ADE866819AACD7D2F5E&filedata=C:\JobInterview\BatchUpload\auth.xml&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1

REST リクエストに対して次の応答が返されます。

   The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed This was not an uploaded form type</message></Response>

ここにJavaコードがあります

URL のクエリを使用するメソッド:

public static String doQuery(String loginUrl) throws IOException{

    URL url = new URL(loginUrl);
    HttpURLConnection conn =
          (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("POST");

      if (conn.getResponseCode() != 200) {
        throw new IOException(conn.getResponseMessage());
      }


      InputStream is = conn.getInputStream();
      //Buffer the result into a string
      BufferedReader rd = new BufferedReader(
          new InputStreamReader(is));
      StringBuilder sb = new StringBuilder();
      String line;
      while ((line = rd.readLine()) != null) {
         line = StringEscapeUtils.unescapeHtml4(line); 
        sb.append(line);
      }

      rd.close();
      conn.disconnect();
      System.out.println("The content was :: " + sb.toString());
      return sb.toString();
}

アップロードするメソッド:

  public static void testUpload(String seesionToken, String file ) throws IOException{

    String upload = "http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+file+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1" ;
    System.out.println(upload);
    Authenticate.doQuery(upload);
}

doQuery に追加した後: conn.setRequestProperty("Content-Type", "multipart/form-data");

RESTFul URL を次のように変更します。

       http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+files.toURI()+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1"

URL がファイルを送信しようとしているが、まだファイルをアップロードできないことが検出されたようです。

        The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed There was no appropriate FILE found in the upload</message></Response>
4

2 に答える 2

1

curl コマンドは、ファイル @/Users/cpinera/tmp/panda2.jpg をアップロードしています。URL を単独で使用しても、ページにアクセスするだけなので、「これはアップロードされたフォームではありません」というエラーが表示されます。

于 2012-03-21T07:25:02.630 に答える
0

-F パラメーターを指定して実行するcurlと、指定された名前と値のペアが HTTP 要求の本文で渡された HTTP POST 要求が送信されます。クエリ文字列パラメーターを使用して URL にアクセスすると、HTTP GET が実行されます。サーバーがこれら 2 つの要求メソッドを異なる方法で処理する可能性があります。

いくつかの Java コードを投稿したので、更新します。

URL のクエリ文字列部分の値は、要求を処理する Web サーバーに情報を伝えるために使用されます。もちろん、これC:/path/to/your/fileはローカル マシン上のファイルへのパスであるため、このリモート サーバーは何が何であるかを知りません。このファイル データを送信する適切な方法は、Java でファイルを開き、それを読み取ってHttpUrlConnectionの出力ストリームに書き込むことです。

たとえば、次の Android ドキュメントの説明の「コンテンツの投稿」の下にあるコード スニペットを参照してくださいHttpUrlConnection: http://developer.android.com/reference/java/net/HttpURLConnection.html

于 2012-03-21T07:25:30.420 に答える