2016-06-14 13 views
1

cUrlからAndroidに移行するにはいくつかの質問がありますが、見つけたファイルのアップロードを扱うものはありません。cUrlをファイルと一緒にAndroid HttpUrlConnectionに変換する

このカール要求は動作します:

$ curl -X PUT -u user:password --data-binary @myfile.pdf "https://example.com/myurl?id=myid&filename=myfile.pdf&title=My+Title&mimetype=application/pdf" 

私がしようとしています:

output(fis, c.getOutputStream(), fl);がOutputStreamにInputStreamを書き込み、/の両方をフラッシュ閉じ
String url = "https://example.com/myurl?id=myid&filename=myfile.pdf&title=My+Title&mimetype=application/pdf"; 
String fileUrl = "myfile.pdf"; 
String userPassword = "user:password"; 
String userpass = Base64.encodeToString(userPassword.getBytes(), Base64.DEFAULT); 

File f = new File(fileUrl); 
    if(f.isFile()) { 
     HttpURLConnection c = null; 
     URL u = null; 
     try { 
      u = new URL(url); 
       c = (HttpURLConnection) u.openConnection(); 
      c.setRequestProperty("Authorization", "Basic " + userpass); 
      c.setDoOutput(true); 
      c.setRequestMethod("PUT"); 
      c.setRequestProperty("Content-Type", "multipart/form-data"); 

      FileInputStream fis = new FileInputStream(f); 
      long fl = f.length(); 
      output(fis, c.getOutputStream(), fl); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

を。

私はmethod not allowedという応答を得ています。だれかが間違っていることを知っていますか?

編集:彼らのレスポンスヘッダを持っていることを(私には)本当に奇妙です:Allow: POST,OPTIONS,GET,HEADしかしPUTカール作品を使用しました。

編集二

カールを使用する場合は、私が実際に取得:

Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE 

しかし、HttpURLConnectionのを使用しているとき、私はカールユーザエージェントにユーザーエージェントを設定していても、何のAccess-Control-Allow-Methodsはありませんc.getHeaderField()を使用してください。代わりにフィールドは単にAllowであり、PUTがありません。

答えて

0

これは愚かでした。上記のコードに何も問題はありませんが、PUTを受け入れるように設定されていない.netドメインがapiによって使用されています。デベロッパーは、.comドメインを使用したカールの例を送ってきました。

1つの問題は、mySecretWeirdProtocolHandler(),NastyBugNobodyCaresAbout.class、のようなものでAndroidが満ちていることです。だから私はそれが私またはそれらであるかどうかわからず、ストレスの多い楽しい時間のために、すべてを一度に見上げる。

関連する問題