Flutter:无法上传带有dio发布请求的图片。文件上传但无法打开

时间:2020-11-04 06:39:02

标签: node.js express flutter post dio

文件正在上传,但无法打开。文件为196 kb,在服务器上上传的文件为191 kb,文件已损坏(无法打开)。我已经尝试过使用dart http,但是却遇到了同样的错误。这是我在做什么;

void getFile() async {
    FilePickerResult result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['jpg', 'mp4', 'mov', 'png', 'jpeg'],
      allowMultiple: false,
    );
    if (result != null) {
      PlatformFile file = result.files.first;
      var dio = new Dio();
      dio.options.baseUrl = uri;
      FormData formData = new FormData.fromMap({
        "filename":
            await MultipartFile.fromFile(file.path, filename: file.name),
        // "data": MultipartFile.fromBytes(file.bytes, filename: file.name),
      });
      var response = await dio.post(
        "/upload/${file.path.split('/').last}",
        data: formData,
      );
      if (response.statusCode == 200) {
        print(response);
        // final player = json.decode(response.body);
        // checkState(player);
      } else {
        throw Exception('Failed to upload a file');
      }
    } else {
      // User canceled the picker
    }
  }

这也是在node.js服务器上的请求

service.post("/upload/:filename", function (req, res) {
  console.log(req);
  var filename = path.basename(req.params.filename);
  filename = path.resolve("app/media", filename.replace(/\s/g, ""));
  var dst = fs.createWriteStream(filename);
  req.pipe(dst);
  dst.on("drain", function () {
    console.log("Yukleniyor... ", new Date());
    req.resume();
  });
  req.on("end", function () {
    console.log("Tamamlandi... " + filename);
    res.end(JSON.stringify(MyPlayer));
  });
});

编辑 这是网络cli上的有效示例

const selectedFile = document.getElementById("media").files[0];
  $.ajax({
    type: "POST",
    url: target + "/upload/" + selectedFile.name,
    data: selectedFile,
    processData: false,
    contentType: false,
  }).done(function (data) {
    document.getElementById("label").innerHTML = data;
  });

1 个答案:

答案 0 :(得分:0)

由于您尝试使用Http和Dio并遇到相同的错误,因此问题应该在服务器上而不是Flutter代码上。