格式读取Dart Shelf应用程序中的multipartFormData时出现异常

uinbv5nw  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(92)

我有使用Dart的客户端和服务器应用程序。客户端将song.m4a文件发送到服务器。服务器尝试使用shelf_multipart库读取该文件。
阅读文件时,服务器报告FormatException:缺少扩展字节(偏移量44处)。
发送文件的客户端代码如下:'

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 ******

阅读author字段后,服务器报告以下错误:

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

Macos Monterey 12.6.3

wlsrxk51

wlsrxk511#

对于二进制数据,我必须更改以下内容

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

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

相关问题