0

親愛的堆棧溢出 Android上的URI概念非常好,它抽象出我們如何在設備和互聯網上指向不同的東西,但它確實需要仔細考慮與他們一起工作。我有幾個問題給你。在Android上使用改進/ okhttp堆棧上傳遠程URI

1)人們通常如何使用遠程URI上傳到自己的服務器? 我能想到的最好方法是,將遠程URI下載到磁盤,然後給okhttp指定一個指向該文件的指針。 這是做這件事的最好方法嗎?

2)其次是關於本地URI的更基本的問題。 URI可以指向不同的東西,並且文件的絕對路徑存儲在各種提供者的不同位置。請參閱this link中的#getPath。

由於okhttp僅適用於絕對文件,因此該文件中存在此邏輯是通過okhttp發送文件的最佳方法。

或者你有什麼更好的建議嗎?

讓我們假設爲了簡單起見,我們正在開發Kitkat及以上版本。

回答

1

1)是的。最好的辦法是保證你在上傳完成之前能夠訪問它(特別是如果你有一個簡歷功能,上傳可能會被中斷,以後可能會重新啓動),那麼最好的辦法是在本地拷貝一份你自己的應用。 URI可以消失或稍後不可用。

2)是的。看1)使用文件,它們是具體可靠的。

編輯:

按你的意見,我意識到,我的答案是沒有很好地解釋。 我所說的「使用文件」的意思是使用context.getContentResolver().openInputStream(uri)將文件本地保存到您自己的應用程序,使用context.openFileOutput("temp_file", 0)context.getFilesDir(),然後您可以安全地使用此文件。

所有這些FileUtils上的方法試圖猜測URI的路徑是片狀的並且具有邊緣情況並且只會給出麻煩。

+0

文件具體且可靠。但問題是URI不會始終暴露絕對文件路徑。試圖找到絕對文件路徑正好與爲什麼首先開發URI的原因相反。我使用FileUtils.getPath作爲Google Drive應用中的內容URI,該函數返回null。比方說,我找出路徑是...明天,如果其他應用程序出現了不同的文件路徑位置..我們必須不斷添加新的代碼來獲取路徑嗎?如何使用: –

+0

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

+0

請參閱我的編輯。我的回答沒有很好解釋。 – Budius