首页 > 解决方案 > 使用改造从服务器下载 pdf

问题描述

我从服务器下载 pdf 文件时遇到问题,我找到了转换字节数组的函数,我使用的是 android 10 xiaomi mi 9。

    private fun InputStream.saveToFile(file: String) = use { input ->
        File(file).outputStream().use { output ->
            input.copyTo(output)
        }
    }

如果我使用这个乐趣我有例外

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.securityenginee, PID: 4154
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
     Caused by: java.io.FileNotFoundException: 1606998235369.pdf: open failed: EROFS (Read-only file system)
        at libcore.io.IoBridge.open(IoBridge.java:496)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
        at com.example.securityenginee.view.fragment.contragentAndAppInfo.ActsAndCountsFragment.saveToFile(ActsAndCountsFragment.kt:339)

我的权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这个我检查权限

        val permissionStatus1 =
            ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
        if (permissionStatus1 == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(requireContext(), "PERMISSION_GRANTED", Toast.LENGTH_SHORT).show()
        }else if (permissionStatus1 == PackageManager.PERMISSION_DENIED){
            Toast.makeText(requireContext(), "PERMISSION_DENIED", Toast.LENGTH_SHORT).show()
        }

所有权限 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 发送 PERMISSION_GRANTED。

现在我更改功能保存文件,他也不起作用

    fun writeBytesAsPdf(bytes: ByteArray) {
        val path = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
        var file = File.createTempFile("my_file", ".pdf", path)
        val fos = FileOutputStream(file)
        fos.write(bytes)
        fos.flush()
        fos.close()
        Toast.makeText(requireContext(), "test", Toast.LENGTH_SHORT).show()
    }

标签: androidkotlinretrofit

解决方案


推荐阅读