react-native - React-Native WebView:问题下载和保存动态生成的文件
问题描述
我们正在打开一个 URL(在 WebView 中),它有一个按钮,可以根据用户选择的过滤器动态生成和下载文件(例如 PDF 或 Excel 或任何其他类型)。这意味着我们没有直接链接到那些可以使用网络请求下载的文件。在chrome中,我们可以看到下载的文件。但是在 WebView 中,我们既看不到下载文件(chrome 在窗口底部显示的方式),也没有任何方法可以拦截/查看静默下载的位置。下面是网页视图:
<WebView
ref={ref => (webview = ref)}
originWhitelist={['*']}
source={{ uri: pageURL }}
javaScriptEnabled={true}
startInLoadingState={true}
scalesPageToFit={true}
domStorageEnabled={true}
onError={(err) => console.log(err)}
onHttpError={(err) => console.log(err)}
allowFileAccess={true}
allowFileAccessFromFileURLs={true}
allowUniversalAccessFromFileURLs={true}
allowingReadAccessToURL={true}
mixedContentMode="always"
onFileDownload={({ nativeEvent }) => {
const { downloadUrl } = nativeEvent;
console.log(downloadUrl);
}}
onNavigationStateChange={handleWebViewNavigationStateChange}
onLoad={() => {
webview.injectJavaScript(jsCode);
}}
onMessage={event => {
const { data } = event.nativeEvent;
}}
/>
因此,我们有以下查询:
- 如何知道 WebView 是否真的下载了文件?
- 有没有办法知道 WebView 在哪里下载文件?
- 有没有办法指定 WebView 应该下载文件的默认位置?
环境: Expo:40.0.0,React-native:0.63,react-native-webview:11.0.0
当它要求允许在设备上下载和存储文件时,我们点击了“允许”。此外,单击按钮时不会触发 onNavigationStateChange(可能是因为文件在同一页面上下载而没有导航)。我们有 onError 和 onHttpError 不打印任何东西,所以那里似乎没有任何问题。
以下是单击按钮下载文件时执行的代码(C#):
string attachment = "attachment; filename=temp.csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.AddHeader("Pragma", "public");
// Prepare file content
HttpContext.Current.Response.Write(fileContent.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
解决方案
推荐阅读
- python - 使用 Python 将带撇号的名称插入数据库表
- c++ - way to separate non-class library into header and implementation
- amazon-web-services - AWS CLI docker:参数格式不正确
- mongodb - 在 MongoDB 中查询嵌套数组
- javascript - 如何加载 CSV 文件,然后将其转换为 javascript 数组(将表单的输入与外部 csv 文件进行比较以显示特定内容)
- javascript - 推入 mongodb 中的文档数组
- python - 有没有比这更 Pythonic 的方法来遍历字典键以查找值?
- javascript - ExtJS 4.0.7 - 垂直滚动条未在网格中显示/工作
- c# - 使用 DbContext 以编程方式添加 Serial# 列
- excel - 在 Excel 中过滤两个分组级别