Flutter Web:文件选择器抛出“无效参数(路径):不能为空”错误

     2023-02-23     68

关键词:

【中文标题】Flutter Web:文件选择器抛出“无效参数(路径):不能为空”错误【英文标题】:Flutter Web: File Picker throws 'Invalid argument(s) (path): Must not be null' error 【发布时间】:2021-04-01 20:37:07 【问题描述】:

目标:使用文件资源管理器选择文件并上传到 Firebase 存储。

包:file_picker:^2.1.4

问题:引发错误:“无效参数(路径):不得为空”。

文件资源管理器可以正常打开,我可以选择一个文件。但是,在我选择文件后没有任何反应。以下是我到目前为止尝试过的代码:

FilePickerResult result;
File uploadfile;

try
    result = await FilePicker.platform.pickFiles(type: FileType.custom,
          allowedExtensions: ['jpg', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'txt'],
        );
 catch(e)  
    print(e);


if(result != null) 
     
    try
          uploadfile = File(result.files.single.path);
 
          String filename = basename(uploadfile.path);
 
          StorageReference storageRef = FirebaseStorage.instance.ref().child('$path$filename');
 
          final StorageUploadTask uploadTask = storageRef.putFile(uploadfile);
 
          final StorageTaskSnapshot downloadUrl = (await uploadTask.onComplete);
 
          if (downloadUrl.error == null)
 
            final String attchurl = (await downloadUrl.ref.getDownloadURL());
 
          
     catch(e) 
       print(e);
    

我确信代码会在以下位置引发错误:uploadfile = File(result.files.single.path);

我尝试了多个博客中提供的各种建议。即使解决方案here 也无济于事,我也遇到了同样的错误。见以下代码:

  FilePickerResult _filePickerResult;
  File uploadfile;
  try 
        _filePickerResult = await FilePicker.platform.pickFiles(
            type: FileType.custom,
           allowedExtensions: ['jpg', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'txt'],);
       on PlatformException catch (e) 
        print("Unsupported operation" + e.toString());
      

      if (_filePickerResult != null) 
        try
          uploadfile = File(_filePickerResult.files.single.path);

          print(uploadfile);
        catch(e)
          print(e);
        
        
  

任何帮助将不胜感激。谢谢!

*** 更新 ***

当我这样做时:

print(result);
print(result.files);
print(result.files.single);
print(result.files.single.name);
print(result.files.single.size);
print(result.files.single.path);

我明白了:

Instance of 'FilePickerResult'
[Instance of 'PlatformFile']
Instance of 'PlatformFile'
FileName01.xlsx
10
null

所以基本上,result.files.single.path 失败了。希望这可以帮助。谢谢!

【问题讨论】:

你能用断点告诉你给出错误的确切行吗? 上传文件 = File(result.files.single.path); result 对象是否完全为空?可以详细介绍一下吗? @easeccy:我已经更新了这个问题。希望这可以帮助。谢谢! 【参考方案1】:

我可能已经解决了这个问题...

显然,path 在使用 web 时始终是 null,根据 file_picker wiki。 他们建议改用bytes 来检索文件数据。

因此,按照上述说明和一些修改,我能够成功上传文件。修改后的代码现在如下所示:

FilePickerResult result;

  try
    result = await FilePicker.platform.pickFiles(type: FileType.custom,
          allowedExtensions: ['jpg', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'txt'],
        );
   catch(e)
   print(e);
    

      if(result != null) 
        try

          Uint8List uploadfile = result.files.single.bytes;
        
          String filename = basename(result.files.single.name);
          
          fs.Reference storageRef = fs.FirebaseStorage.instance.ref().child('$dirpath$filename');
          
          final fs.UploadTask uploadTask = storageRef.putData(uploadfile);
          
          final fs.TaskSnapshot downloadUrl = await uploadTask;
          
          final String attchurl = (await downloadUrl.ref.getDownloadURL());
          
          await AttachmentService(orgid: orgID, orgname: orgName, projid: projID).addattachmentobjs(objType, objID, attchdate, filename, attchurl);
          
      catch(e) 
          print(e);
        

      

基本上,我只是改变了:

FilePickerResult uploadfile = File(result.files.single.path);

到:

Uint8List uploadfile = result.files.single.bytes;

我用storageRef.putData(uploadfile);代替storageRef.putFile(uploadfile);

我确实在final fs.TaskSnapshot downloadUrl = await uploadTask; 遇到了MissingPluginException No implementation found for method StorageReference#putData,我通过将firebase_storage 插件更新到最新解决了这个问题。

希望这对以后遇到类似 Flutter Web 问题的人有所帮助。

【讨论】:

非常感谢!这已经给我带来了几天的麻烦!我只收到控制台错误:“无法读取 null 的属性 'Symbol(dartx.contains)'”

RichTextBox.RTF 设置器抛出 System.ArgumentException。文件格式在 Windows 版本 1803 中无效

】RichTextBox.RTF设置器抛出System.ArgumentException。文件格式在Windows版本1803中无效【英文标题】:RichTextBox.RTFsetterthrowingSystem.ArgumentException.FileformatisnotvalidinWindowsversion1803【发布时间】:2019-09-1212:40:37【问题描述】:模拟以下场景重现... 查看详情

SAX XML 解析器抛出空指针异常

】SAXXML解析器抛出空指针异常【英文标题】:SAXXMLParserthrowingNullPointerException【发布时间】:2012-02-0409:02:05【问题描述】:我正在尝试用Java编写一个SAXXML解析器,但我不断收到一个空指针异常,我似乎无法弄清楚如何修复。这是... 查看详情

“SQLite.SQLiteConnection”的类型初始化器抛出异常

】“SQLite.SQLiteConnection”的类型初始化器抛出异常【英文标题】:Thetypeinitializerfor\'SQLite.SQLiteConnection\'threwanexception【发布时间】:2018-04-0512:56:08【问题描述】:我正在尝试实现SQLite的基本用法。我有一个Button和一个EditText。我想... 查看详情

解析器抛出错误时的 GraphQL 重定向

】解析器抛出错误时的GraphQL重定向【英文标题】:GraphQLredirectwhenresolverthrowserror【发布时间】:2017-05-0723:12:37【问题描述】:我正在使用graphql-server-express构建一个使用RESTAPI的GraphQL服务器。我的情况是,当用户未通过身份验证访... 查看详情

AVD 管理器抛出“最后一个位置提供程序被禁用”错误

】AVD管理器抛出“最后一个位置提供程序被禁用”错误【英文标题】:AVDmanagerthrows\'thelastlocationproviderwasdisabled\'error【发布时间】:2012-02-2906:10:45【问题描述】:我正在尝试创建一个HTML5页面来捕获地理位置,但在AVD管理器上出... 查看详情

Flutter 错误:无效参数:URI 文件中未指定主机:///null

】Flutter错误:无效参数:URI文件中未指定主机:///null【英文标题】:FlutterError:Invalidargument(s):NohostspecifiedinURIfile:///null【发布时间】:2021-08-1001:22:18【问题描述】:我想从Firebase实时数据库访问我的图像。但是我还没有将图像保... 查看详情

使用 dart:HTML 库在 Flutter Web 中选择文件时如何获取 Flutter 中的文件名?

】使用dart:HTML库在FlutterWeb中选择文件时如何获取Flutter中的文件名?【英文标题】:HowtogetthefilenameinFlutterwhenusingdart:HTMLlibrarytopickfileinFlutterWeb?【发布时间】:2021-04-1623:35:18【问题描述】:在我的项目中,我定义了一个函数uploadPdf... 查看详情

Flutter Web 的文件夹选择器?

】FlutterWeb的文件夹选择器?【英文标题】:folder_pickerforFlutterWeb?【发布时间】:2020-12-2714:37:43【问题描述】:我正在开发的网络应用程序要求用户选择一个文件夹来创建一个json文件。我在网上查看过,但这只有在我在代码中硬... 查看详情

选择一个文件并使用 Flutter Web 通过 POST 发送

】选择一个文件并使用FlutterWeb通过POST发送【英文标题】:ChooseaFileandsendthroughPOSTwithFlutterWeb【发布时间】:2020-05-0220:12:18【问题描述】:问题陈述嗨,基本上,我想要的是通过POST将文件发送到python服务器端FlaskAPI。目标是为用户... 查看详情

jason有一个字符串字段为null,因此jackson解析器抛出错误(代码片段)

RESTAPI返回的JSON字符串为“Id”:1,“Name”:“Test1”,“Description”:“Test1description”,“ShowInMainScreen”:true,“CREATEDATE”:“2017-12-09T09:55:37”,“LASTUPDATEDATE”:“2017-12-09T09:55:37”,“Traini 查看详情

Cognito 错误 I/flutter(4963):无效参数:需要 PASSWORD 参数

】Cognito错误I/flutter(4963):无效参数:需要PASSWORD参数【英文标题】:CognitoErrorI/flutter(4963):Invalidargument(s):PASSWORDparameterisrequired【发布时间】:2020-01-0305:52:52【问题描述】:我正在尝试按照Flutterpub.dev文档进行Cognito和AWS用户身份... 查看详情

Flutter web - 调用 http.get 抛出异常

】Flutterweb-调用http.get抛出异常【英文标题】:Flutterweb-callhttp.getthrowsexception【发布时间】:2020-03-1004:06:28【问题描述】:这在Android/桌面上运行良好:Future<List<City>>fetchCities()asyncfinalresponse=awaithttp.get(globals.url+\'/city\',h 查看详情

无法从 Flutter Web 读取 .txt 文件

】无法从FlutterWeb读取.txt文件【英文标题】:unabletoread.txtfilefromflutterweb【发布时间】:2021-05-1310:27:12【问题描述】:我正在尝试从Flutterweb读取文本文件。当我在本地运行应用程序时,它按预期工作。但是当我在IIS服务器中部署we... 查看详情

Flutter web 在同一个项目但不同的笔记本电脑上抛出错误

】Flutterweb在同一个项目但不同的笔记本电脑上抛出错误【英文标题】:Flutterwebthrowserroronsameprojectbutdifferentlaptop【发布时间】:2021-04-0521:23:23【问题描述】:所以我刚刚在比赛中赢得了一台新笔记本电脑,现在我在迁移我的颤振... 查看详情

FCM iOS:推送通知抛出无效参数

】FCMiOS:推送通知抛出无效参数【英文标题】:FCMiOS:Pushnotificationsthrowinvalidargument【发布时间】:2018-10-3104:02:36【问题描述】:我正在尝试使用CloudFunctions和FCMforiOS实现pushNotifications,但我一直抛出此错误:2018-05-21T13:04:00.087Z我发... 查看详情

Flutter Web - 如何选择 PDF 文件并 POST 到 API?

】FlutterWeb-如何选择PDF文件并POST到API?【英文标题】:FlutterWeb-HowtopickaPDFfileandPOSTtoanAPI?【发布时间】:2020-05-1504:42:12【问题描述】:我正在构建一个FlutterWeb应用程序,其中一部分用户可以从他们的计算机中选择一个或多个PDF。... 查看详情

在 DropdownButton 中选择 Item 会导致 Flutter 抛出错误

】在DropdownButton中选择Item会导致Flutter抛出错误【英文标题】:SelectionofIteminDropdownButtoncausesFluttertothrowerror【发布时间】:2019-01-0216:45:02【问题描述】:我目前正在尝试从RESTAPI检索数据(标签)并使用该数据填充我可以成功执行... 查看详情

如何在 Flutter Web 中选择要上传的文件夹/文件夹?

】如何在FlutterWeb中选择要上传的文件夹/文件夹?【英文标题】:HowcanIselectfolder/folderstouploadinflutterweb?【发布时间】:2021-11-1106:49:21【问题描述】:我是使用FlutterWeb开发的初学者。我找不到库和解决方案来选择要在FlutterWeb中上... 查看详情