0

スタックオーバーフローのため Android上のURIの概念は素晴らしいですし、デバイスやインターネット上のさまざまなものをどのように指しているかを抽象化していますが、それらと一緒に働く。私はあなたのためにいくつかの質問があります。Android上にretrofit/okhttpスタックを使用してリモートURIをアップロードする

1)一般に、自分のサーバーにアップロードするためにリモートURIをどのように消費するのですか? 私が考えることができる最高ののは、リモートURIをディスクにダウンロードし、ファイルへのポインタをokhttpに与えることです。 これを実行する最善の方法ですか?

2)次に、ローカルURIに関してより基本的な質問があります。 URIは異なるものを指し示すことができ、ファイルへの絶対パスはさまざまなプロバイダのさまざまな場所に格納されます。 #の#getPathを参照してください。

okhttpは絶対フ​​ァイルのみで動作するので、このロジックはokhttpを介してファイルを送信するための最良の方法です。

または何か良いことをお勧めしますか?

簡単にするために、私たちはKitkat以上について開発しているとします。

答えて

1

1)はい。最善の方法は、アップロードの完了まで(特に、再開機能があり、アップロードが中断され、後で再開される場合など)、そのファイルをローカルにコピーすることですあなた自身のアプリケーション。 URIは後で消えるか、利用できなくなる可能性があります。

2)はい。 1)ファイルの使用を参照してください。具体的で信頼できるものです。

編集:

私は私の答えは非常によく説明されていないことに気づいたあなたのコメントのとおり。 "ファイルを使用する"とは、context.openFileOutput("temp_file", 0)またはcontext.getFilesDir()を使用して自分のアプリケーションにローカルでファイルを保存するときにcontext.getContentResolver().openInputStream(uri)を使用して、このファイルを安全に使用することです。

URIのパスを推測しようとするFileUtils上のすべてのメソッドは、ばらばらでエッジケースがあり、問題を引き起こすだけです。

+0

ファイルは、具体的かつ信頼性の高いものです。しかし、問題は、URIが一貫して絶対ファイルパスを公開していないことです。絶対ファイルパスを見つけようとするのは、URIが最初に開発されたのとまったく逆の考え方です。 GoogleドライブアプリのコンテンツURIにFileUtils.getPathを使用した場合、nullが返されます。私はパスが何であるかを知っていると言うことができます...明日、他のアプリケーションがファイルパスの別の場所に来る場合..私たちはパスを取得するために新しいコードを追加し続ける必要がありますか?方法について: –

+0

http://stackoverflow.com/questions/25367888/upload-binary-file-with-okhttp-from-resources –

+0

私の編集をご覧ください。私の答えはあまりよく説明されていませんでした。 – Budius

関連する問題