Expo React Native,将 PDF 文件保存到“下载”文件夹

2023-11-29

以下代码适用于图像文件。但是当我尝试保存 PDF 文件或其他非媒体格式时,我得到无法创建资产 error.
我明白那个世博媒体库旨在处理媒体格式文件。 有没有什么替代方案世博媒体库保存其他文件格式?

import * as FileSystem from 'expo-file-system'
import * as Permissions from 'expo-permissions'
import * as MediaLibrary from 'expo-media-library'

const downloadFile = async (uri: string) => {
    const targetUri = FileSystem.documentDirectory + getFileName(uri)

    const downloadedFile = await FileSystem.downloadAsync(uri, targetUri)

    if (downloadedFile.status === 200) {
        if (Platform.OS === 'android') {
            const permission = await Permissions.askAsync(Permissions.MEDIA_LIBRARY)

            if (permission.status !== 'granted') {
                return
            }

            const asset = await MediaLibrary.createAssetAsync(downloadedFile.uri)
            const album = await MediaLibrary.getAlbumAsync('Download')

            await MediaLibrary.addAssetsToAlbumAsync([asset], album, false)
        }
    }
}

它适用于 Android 设备https://docs.expo.dev/versions/latest/sdk/filesystem/#storageaccessframeworkcreatefileasyncparenturi-string-filename-string-mimetype-string

import * as FileSystem from 'expo-file-system';
import { StorageAccessFramework } from 'expo-file-system';

const permissions = await StorageAccessFramework.requestDirectoryPermissionsAsync();
if (!permissions.granted) {
    return;
}

try {
    await StorageAccessFramework.createFileAsync(permissions.directoryUri, fileName, 'application/pdf')
    .then((r) => {
        console.log(r);
    })
    .catch((e) => {
        console.log(e);
    });
} catch((e) => {
    console.log(e);
});

我的pdf已经下载好了!

就我而言,我必须从 Base64 字符串生成文件。 我的代码:

import * as FileSystem from 'expo-file-system';
import { StorageAccessFramework } from 'expo-file-system';

const permissions = await StorageAccessFramework.requestDirectoryPermissionsAsync();
if (!permissions.granted) {
    return;
}

const base64Data = 'my base 64 data';

try {
    await StorageAccessFramework.createFileAsync(permissions.directoryUri, fileName, 'application/pdf')
        .then(async(uri) => {
            await FileSystem.writeAsStringAsync(uri, base64Data, { encoding: FileSystem.EncodingType.Base64 });
        })
        .catch((e) => {
            console.log(e);
        });
} catch (e) {
    throw new Error(e);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Expo React Native,将 PDF 文件保存到“下载”文件夹 的相关文章

  • Android ToggleButton 始终检查

    如果切换按钮处于选中或取消选中状态 我想存储在 SharedPreferences 中 toggle setOnCheckedChangeListener new OnCheckedChangeListener public void on
  • 使用同一个侦听器的多个活动

    我有 4 个活动 它们都包含一个 xml 页脚 其中包含 4 个按钮 每个活动一个 我现在想为这些按钮设置 onclicklistener 它是页脚中的自制菜单 问题是 如何使用侦听器以便重用代码 我有两个想法 创建一个实现 onclick
  • 为什么不能在 Fragment 中使用 ViewPager?它实际上是

    有信息无法使用ViewPager在一个Fragment在许多来源中 例如 Android 开发者繁忙编码指南 http commonsware com 作者 Mark Murphy 或者类似的帖子this https stackoverfl
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 嵌套 XML 布局文件

    android 有没有办法从另一个布局文件引用 xml 布局文件 为了更好地解释 我有一个名为layout1 xml 和layout2 xml 的布局文件 我可以从layout1 xml引用layout2 xml吗 用这个
  • 当我单击“完成”键时,Android OnEditorActionListener() actionId 给出 0

    我创建了一个键盘 当用户输入数字时 它会输入特定的 EditText 但是当用户单击Done关键 它没有去setOnEditorActionListener但它关闭了键盘 这是我的代码 final EditText txtQty new E
  • 如何使用 RecyclerView 创建此布局?

    我正在尝试使用这种类型的布局创建回收器视图 这些项目是字符串 可以以不同的大小出现 我不知道每行中有多少项目 我可以使用 StaggeredGridLayoutManager 来做到这一点吗 该图像只是一个假示例 每行可以有更多项目 您可能
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • Android 和 Google 地图内部片段以及其他控件和 viewpager

    我是android编程新手 我有一个带有 3 个页面 片段 的小应用程序 使用 pageradapter 和 viewpager 在它们之间滑动 其中一个页面包含复选框 和其他控件 和地图 我的问题是程序在启动时崩溃 Fragment co
  • FragmentActivity 无法解析为类型

    我正在尝试来自的应用程序这个博客 http android developers blogspot com 2011 02 android 30 fragments api html 在延长的同时FragmentActivity 我收到以下
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 双屏 Android Studio 中不显示自动补全

    我刚刚从 Eclipse 切换到 Android Studio IntelliJ 我不明白自动补全是如何工作的 我尝试了 Control Space Control Shift Space 但没有相关建议 不在 Java 文件中 也不在布局
  • TabLayout 的不同 tabMode

    我正在使用 ViewPager 和 TabLayout 如果选项卡可以放置在显示 tabMode 上 则它们必须是 app tabMode fixed else app tabMode scrollable 我怎样才能做到这一点 我不明白你
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • 如何使用 XML::LibXML 解析 XML 文档并构建 Perl 哈希

    我有这样的 XML 数据
  • 如何用Flutter实现position:sticky和bottom 0?

    我想建立一个带有粘性页脚的列表视图 例如本文的 粘到底 在颤振中 In CSS main footer position sticky bottom 0 但是 Flutter 该怎么办呢 我想要的是 可滚动的大内容 页脚 粘性 可滚动的大内
  • JavaScript 闭包和 setTimeout

    闭包是我在 JS 中还没有完全掌握的东西 我认为这是一个封闭问题 我正在尝试创建一个进度条 每隔 x 秒我想增加 DIV 的宽度 这是应该执行此操作的部分 for i 0 i lt counter i setTimeout function
  • System.Drawing.Graphics.DpiX 始终返回 96

    我有 vb net winform 应用程序 自动缩放模式 dpi 自动缩放 假 自动调整大小 true 更改 DPI 设置后我已退出 我也尝试过重新启动机器 Using g As Graphics form CreateGraphics
  • 如何将我的代码从 v11 迁移到 Discord.js v12?

    我升级到 Discord js v12 但它破坏了我现有的 v11 代码 以下是导致错误的一些示例 TypeError client users get is not a function const user client users g
  • Android 中用颜色填充 ArrayList

    我想创建2个ArrayList 一种持有 16 种颜色 另一种持有 139 种颜色 我有颜色列表 RGB 为 255 126 32 十六进制为 0xFFFF2552 我想使用 ArrayList 稍后从中选择随机颜色 我试过 int 但不起
  • 在通过管道将 STDOUT 传输到文件时捕获 STDERR 的输出

    我的情况很奇怪 我正在尝试使用 Perl 自动备份 SVN 存储库集合 我正在使用 svnadmin dump 命令 该命令将转储发送到 STDOUT 并将遇到的任何错误发送到 STDERR 我需要运行的命令的形式为 svnadmin du
  • 对可拖动项目应用双击

    我有一个黄色按钮 可以将其拖放到灰色面板上 我使用 handleDragStop 函数来处理用户拖放黄色按钮时需要完成的所有任务 一切都很好 但是 我想知道如何启用用户双击黄色按钮的行为并具有与拖放时相同的行为 top icon dragg
  • c# 自定义 Dictionary 接受重复键进行序列化

    我需要实现一个有点类似字典的自定义功能 但可以插入重复的键 所以基本上我需要从 Dictionary 中得到的是将对象序列化为以下 JSON 的可能性 One Value 1 Two Value x One Value 10 Two Val
  • 如何通过 Watin 中的代码关闭弹出窗口拦截器?

    我在通过 watin 代码关闭弹出窗口阻止程序时遇到麻烦 谁能帮我知道如何通过 watin 关闭 IE 的弹出窗口拦截器 如果 IE 中安装了工具栏 如 google yahoo 或 msn 的弹出窗口拦截器 有什么方法可以关闭它们吗 提前
  • 推荐用于托管许多独立补丁的 DVCS 机制

    我有一个项目刚刚开始http sourceforge net projects iotabuildit 更多详细信息请参见http sourceforge net p iotabuildit wiki Home 当前正在使用 Mercuri
  • 如何在ReactJS中使用video元素的playbackRate参数?

    我需要你的帮助来修复我的代码 class header extends Component playVideo You can use the play method as normal on your video ref this ref
  • Lua 5.2 添加 luasocket (不稳定)

    我正在尝试将 luasocket 与 lua 5 2 一起使用 我从 git 存储库下载了代码并构建了它 然后进行 make install 以便生成 core dll 和 mime dll 将它们放入正在开发的自定义 lua 程序目录 C
  • ExpectIt:实施 sudo -i 时遇到问题

    我正在创建一个 Web shell 客户端并成功创建了一个简单的终端 我可以执行基本命令 但我需要执行sudo i并传递密码 发送 sudo i 命令后 我 期望 新用户 作为 root 提示 但 期望 永远等待 我可以看到提示符合预期 该
  • 在下游生成新的 Windows 窗体时如何使用 DI?

    我的 Unity DI 容器正在运行最初与我的 Windows 窗体应用程序 在Program cs我有以下内容 static void Main var container BuildUnityContainer Application
  • 在 jqGrid 中的 loadBeforeSend 上设置 Url

    我有一个用于大量报告的 wcf 服务 该服务将 json 数据返回到我的 jqgrid 一切都按预期进行 但是 由于每个报告查询有大量用户输入 我选择使用与我在服务器上设置的一系列 输入模型 相匹配的 json 字符串 我不想在我的路线中弄
  • 调用 finish() 并重新启动应用程序后,Timber 重复日志

    我有一个触摸监听器在我的 TextView 上 在触摸时 我登录Timber i 然后我打电话finish 如果在 finish 之后 我再次启动我的应用程序 并再次单击 TextView 它将记录两次 然后 3 次 依此类推 如果我用普通
  • 当单元格尚未构建时,如何计算 heightForRowAtIndexPath?

    问题 如何最好地计算 UITableViewController 的 heightForRowAtIndexPath 方法中一行的高度 假设 我正在使用自定义子类 UITableViewCell 子视图的实际大小 例如 UILabels 是
  • removeChild() 方法打破了 for 循环

    我正在使用以下代码从 XMl 文件中删除多个元素 NodeList removeNodeList doc getElementsByTagName server1 Element rootElement doc getDocumentEle
  • Expo React Native,将 PDF 文件保存到“下载”文件夹

    以下代码适用于图像文件 但是当我尝试保存 PDF 文件或其他非媒体格式时 我得到无法创建资产 error 我明白那个世博媒体库旨在处理媒体格式文件 有没有什么替代方案世博媒体库保存其他文件格式 import as FileSystem fr