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がありません。