1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
為了讓用戶選擇我的片段中的圖片:
此代碼正在使用ACTION_GET_CONTENT
. 特別是在 Android 7.0+ 上,通常 (and ACTION_OPEN_DOCUMENT
) 將返回Uri
帶有content
方案的值。您的代碼假定您正在Uri
使用一個(gè)方案獲取值file
,其中路徑實(shí)際上具有意義。此外,您的代碼假定用戶正在選擇您可以訪問的文件系統(tǒng)上的文件,并且沒有任何強(qiáng)制用戶這樣做的東西。ACTION_GET_CONTENT
可以由內(nèi)容為以下內(nèi)容的應(yīng)用程序支持:
外部存儲(chǔ)上的本地文件
另一個(gè)應(yīng)用程序內(nèi)部存儲(chǔ)上的本地文件
可移動(dòng)存儲(chǔ)上的本地文件
加密的本地文件,需要即時(shí)解密
BLOB
保存在數(shù)據(jù)庫列中的字節(jié)流互聯(lián)網(wǎng)上的一段內(nèi)容,需要先由其他應(yīng)用下載
即時(shí)生成的內(nèi)容
...等等
而不是使用RequestBody.create()
,使用InputStreamRequestBody
來自這個(gè) OkHttp 問題的評(píng)論。您提供與以前相同的媒體類型,但您提供的不是 a File
(您錯(cuò)誤地創(chuàng)建),而是ContentResolver
(來自getContentResolver()
a 上的Context
)和Uri
.
這篇博文演示了如何使用InputStreamRequestBody
(特別是原始的 Kotlin 端口)以這種方式上傳內(nèi)容。這篇博文提供了對(duì)同一問題和類似解決方案的另一種看法。
添加回答
舉報(bào)