Flutter:无法通过 dio post 请求上传图片。正在上传文件但是打不开
Flutter: failed to upload image with dio post request. File uploading but cant open it
正在上传文件但打不开。文件是196kb,上传到服务器的是191kb,已经坏了(打不开)。我先尝试使用 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));
});
});
编辑
这是 web 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;
});
既然你已经尝试使用 Http 和 Dio 并得到同样的错误,那么问题应该在服务器上而不是 Flutter 代码上。
正在上传文件但打不开。文件是196kb,上传到服务器的是191kb,已经坏了(打不开)。我先尝试使用 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));
});
});
编辑 这是 web 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;
});
既然你已经尝试使用 Http 和 Dio 并得到同样的错误,那么问题应该在服务器上而不是 Flutter 代码上。