使用 Flutter web (chrome) 从系统目录获取文件路径以读取文件内容 例如:CSV 或文本文件

Posted

技术标签:

【中文标题】使用 Flutter web (chrome) 从系统目录获取文件路径以读取文件内容 例如:CSV 或文本文件【英文标题】:Get file path from system directory using Flutter web (chrome) to read file content Eg: CSV or Text file 【发布时间】:2021-05-07 23:58:37 【问题描述】:

尝试过的包:https://pub.dev/packages/file_picker

尝试了通过 GitHub 共享的示例代码实现。但是文件路径返回为null for 网络平台。移动平台中的相同实现按预期返回路径。

https://github.com/miguelpruivo/flutter_file_picker/blob/master/example/lib/src/file_picker_demo.dart

注意事项:

    Path_Provider - 不支持网络 dart-io-library - 不支持网络 在Flutter Repo 中打开问题

目标是从路径中读取文件而不是上传。实现此目的的任何解决方法都会有所帮助。

Flutter 频道:测试版

【问题讨论】:

【参考方案1】:

我有一个从计算机中挑选图像的功能。可能对你有用。


import 'dart:html';

void uploadImage(@required Function(File file) onSelected) 
  InputElement uploadInput = FileUploadInputElement()..accept = 'image/*';
  uploadInput.click();

  uploadInput.onChange.listen((event) 
    final file = uploadInput.files.first;
    final reader = FileReader();
    reader.readAsDataUrl(file);
    reader.onLoadEnd.listen((event) 
      onSelected(file);
    );
  );


【讨论】:

【参考方案2】:

file_picker中提到的FAQ:

浏览器无法访问路径,因为它们提供了虚假路径。如果您想创建一个 File 实例以将其上传到某个地方,例如 FireStorage,您可以直接使用字节来执行此操作。

final result = await FilePicker.platform.pickFiles(type: FileType.any, allowMultiple: false);

if (result.files.first != null)
  var fileBytes = result.files.first.bytes;
  var fileName = result.files.first.name;
  print(String.fromCharCodes(fileBytes));

【讨论】:

感谢您的String.fromCharCodes(fileBytes)。不知道这是可能的。

以上是关于使用 Flutter web (chrome) 从系统目录获取文件路径以读取文件内容 例如:CSV 或文本文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在按下按钮时下载 Flutter Web 应用程序?

Flutter 程序在 Chrome 上运行正常,但在 Web 服务器上无法正常运行

Flutter for Web:Android Chrome 底部的文本被截断

flutter web开发环境配置

flutter web开发环境配置

Flutter Web - 如何在桌面上的 Chrome 中测试 Flutter Web 应用程序打开?