With thwe http package I can send an image to a server by putting te binary data in the body of a post call like in the snippet of this code:
var response = await http.post('My_url', body: File(path).readAsBytesSync(), headers: {
'apikey': 'myAPIKEY',
'Content-Type': 'image/*', // set content-length
});
I can't do the same thing by using Dio, I don't know how to put directly the binary data in the body (like i can do it with postman)
DIO did do the upload but only pushed the byte array, which was not helpful. Thanks! – ChillBroDev Mar 25 at 15:29 Add a comment | 3 I also faced the same you have. In DIO you have to send the binary data through streams. Here is the example how I achieved it,
Generally the file upload is done in two ways. File will be a part form request along with other key-value data. flutter image upload with form data File itself is the body of post/put request.
In Dio latest version, UploadFileInfomethod has been replaced by MultipartFileclass. And here the way how to use to post image, video or any file:
1. Add Dio package This will add a line like this to your package’s pubspec.yaml (and run an implicit dart pub get ): First, create an UserModel class that contains the data from the network request. It includes a factory constructor that creates an UserModel from JSON.
I also faced the same you have. In DIO you have to send the binary data through streams. Here is the example how I achieved it,
Uint8List image = File(path).readAsBytesSync();
Options options = Options(
contentType: lookupMimeType(path),
headers: {
'Accept': "*/*",
'Content-Length': image.length,
'Connection': 'keep-alive',
'User-Agent': 'ClinicPlush'
}
);
Response response = await dio.put(
url,
data: Stream.fromIterable(image.map((e) => [e])),
options: options
);
Just putting my solution if someone stumbles upon the same issue.
I had to upload the file at a signed google storage URL. API required to insert the file binary data in the body of the PUT request. Couldn't implement using the DIO plugin, I resolved the issue using the DART HTTP package, Below is a sample code.
import 'package:http/http.dart' as http;
await http.put(
Uri.parse(uploadURL),
headers: {
'Content-Type': mimeType,
'Accept': "*/*",
'Content-Length': File(filePath).lengthSync().toString(),
'Connection': 'keep-alive',
},
body: File(filePath).readAsBytesSync(),
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With