-1

I have client and server application using Dart. Client sends song.m4a file to server. Server trying to read the file using shelf_multipart library.

While reading file, server reports FormatException: Missing extension byte(at offset 44).

Client code to send file is as below:`

Future<String> sendFile() async {
    var uri = Uri(scheme: 'https',host: 'localhost',port: 8443, path: '/readSong');
    
    // create multi-part file
    // read file Content
       var myFile = File(filename);
       var mediaType = MediaType('application', 'octet-stream');
       var fileContent = await myFile.readAsBytes();
       var multipartFile = http.MultipartFile.fromBytes('file', fileContent,
           filename: 'mySong.m4a', contentType: mediaType);
    
    // make multipart request
     var req = http.MultipartRequest('post', uri);
        req.headers.addAll({
        'company-name': 'myCompany',
        'Content-Type': 'multipart/form-data',
       });
       req.fields.addAll({'author': 'meAuthor', 'file': 'song.m4a'});
       req.files.add(multipartFile);         

        var response = await req.send();
        print(response.toString());
    }

    Server side code as below:

    dynamic readSong(shelf.Request req) async {
       final parameters = <String, String>{
            await for (final formData in req.multipartFormData)
            formData.name: await formData.part.readString(),
           };
        //***** Error is generated in this loop ******
       

After reading the author field, the server reports the following error:

       Format Exception: Missing extension byte (at offset 44))

MacOs Monterey 12.6.3

Tusshu
  • 1,664
  • 3
  • 16
  • 32

1 Answers1

0

For binary data, I had to change following

final parameters = <String, String>{
        await for (final formData in req.multipartFormData)
        formData.name: await formData.part.readString(),
       };

To

final parameters = <String, List<int>>{
        await for (final formData in req.multipartFormData)
        formData.name: await formData.part.readBytes(),
       };
Tusshu
  • 1,664
  • 3
  • 16
  • 32