Flutter 桌面文件选择器结果文件。字节返回 null 错误?

Posted

技术标签:

【中文标题】Flutter 桌面文件选择器结果文件。字节返回 null 错误?【英文标题】:Flutter Desktop File Picker Result files. Bytes return null Error? 【发布时间】:2021-11-05 05:12:22 【问题描述】:

我正在构建 Flutter 桌面/Web 应用程序。我使用 Flutter file_picker 4.02 发布它 转换桌面应用程序后在 Flutter Web 上完美工作它在文件选择返回时出错

file.byte 返回值为空

文件选择器结果? result = await FilePicker.platform.pickFiles();

if (result != null) 
  PlatformFile file = result.files.first;

  print(file.name);
  **print(file.bytes);**
  print(file.size);
  print(file.extension);
  print(file.path);
 


 else 
  // User canceled the picker

我需要将选定的结果作为字节获取?

Flutter 频道:Dev 文件选择器:^4.0.2

【问题讨论】:

您似乎已经向他们提出了问题。这很好,但您实际上并没有填写他们的模板。也许最好返回并正确填写他们的错误报告模板。 【参考方案1】:

我只选择一个文件从 chrome 上传。我使用 Stream.fromIterable 将字节映射到数组中。我用文件名、文件大小和字节数组创建了一个 MultipartFile。接下来,我使用 dio 将 FormData 发布到 webapi。 [FromForm] 用于从 dio 发布的 formData 中提取数据。 IFormData 绑定到多部分表单数据。

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

  var fileName = result.files.first.name;
  var fileSize = fileBytes.length;

  FormData formData=FormData.fromMap(
    'id':id,
    'name':submitter,
    'file': MultipartFile(
  Stream.fromIterable(fileBytes.map((e) => [e])),
  fileSize,
  filename: fileName,
)) ;

var url = Uri.parse(_BASE_URL + 'api/review/upload');
Dio dio=new Dio();
try

   String token = this.dataCache?.login?.jwtToken??"";
   Options options=new Options(
      contentType: Headers.formUrlEncodedContentType,
      headers:
        Headers.contentLengthHeader: formFile.length,
      
   );
   options.headers["Authorization"] = "Bearer " + token;
   
   dio.post(url.toString(),data:formFile, options:options);

Webapi

 public class FlutterFormData
    
        public int Id  get; set; 
        public string Name  get; set; 
        public IFormFile file  get; set; 
    
    public async Task<IActionResult> UploadDocument([FromForm] FlutterFormData 
    formData, string name)
    
        String retVal = "unprocessed";
        if (formData.file != null)
        

            if (formData.file.Length > 0)
            
                var filePath = Path.GetTempFileName();

                using (var stream = System.IO.File.Create(filePath))
                
                    await formData.file.CopyToAsync(stream);
                    retVal = "Processed";
                
            
        

        return Ok(retVal);
    

【讨论】:

以上是关于Flutter 桌面文件选择器结果文件。字节返回 null 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter开发之Android物理按键返回

如何在 Flutter 中添加文件选择器插件?

Flutter Web 的文件夹选择器?

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

Java开发桌面程序学习——文件选择器和目录选择器的使用

Flutter 工作管理器返回“工作人员结果失败 [id=XXXXxXXXXXXXXXX 标签= be.tramckrijte.workmanager.BackgroundWorker ]”