【问题标题】:Flutter Desktop File Picker Result files. Bytes return null Error?Flutter 桌面文件选择器结果文件。字节返回 null 错误?
【发布时间】: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

【问题讨论】:

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

标签: flutter flutter-dependencies flutter-web dart-pub dart-null-safety


【解决方案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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多