How to upload images and file to a server in Flutter?

后端 未结 11 913
攒了一身酷
攒了一身酷 2020-11-29 22:21

I use a web service for image processing , it works well in Postman:

Now I want to make http request in flutter with Dart:

import \'pa         


        
相关标签:
11条回答
  • 2020-11-29 22:42

    How to upload image file using restAPI in flutter/dart.

    This work for me.

    var postUri = Uri.parse("apiUrl");
    
    http.MultipartRequest request = new http.MultipartRequest("POST", postUri);
    
    http.MultipartFile multipartFile = await http.MultipartFile.fromPath(
        'file', filePath); 
    
    request.files.add(multipartFile);
    
    http.StreamedResponse response = await request.send();
    
    
    print(response.statusCode);
    
    0 讨论(0)
  • 2020-11-29 22:42

    There is a static method in MultipartFile class which will be helpful called, fromPath which returns Future. You can add the file in your request body using request.files.add() method.

    final postUri = Uri.parse(kAPIUrl);
    http.MultipartRequest request = http.MultipartRequest('POST', postUri);
    
    http.MultipartFile multipartFile =
    await http.MultipartFile.fromPath('image_file', filePath); //returns a Future<MultipartFile>
    
    request.files.add(multipartFile);
    
    http.StreamedResponse response = await request.send();
    
    
    0 讨论(0)
  • 2020-11-29 22:43

    With dio I do like this:

    Future<void> _uploadFileAsFormData(String path) async {
      try {
        final dio = Dio();
    
        dio.options.headers = {
          'Content-Type': 'application/x-www-form-urlencoded'
        };
    
        final file =
          await MultipartFile.fromFile(path, filename: 'test_file');
    
        final formData = FormData.fromMap({'file': file}); // 'file' - this is an api key, can be different
    
        final response = await dio.put( // or dio.post
          uploadFileUrlAsString,
          data: formData,
        );
      } catch (err) {
        print('uploading error: $err');
      }
    }
    
    0 讨论(0)
  • 2020-11-29 22:46

    With Hearder upload image

    Future uploadImageMedia(File fileImage, String token) async {
    
    
      final mimeTypeData =
            lookupMimeType(fileImage.path, headerBytes: [0xFF, 0xD8]).split('/');
             final imageUploadRequest =
            http.MultipartRequest('POST', Uri.parse(mainUrlSite + "wp-json/wp/v2/media"));
    
        final file = await http.MultipartFile.fromPath('file', fileImage.path,
            contentType: MediaType(mimeTypeData[0], mimeTypeData[1]));
    
        imageUploadRequest.files.add(file);
        imageUploadRequest.headers.addAll({
          "Authorization": "Bearer " + token
        });
        try {
          final streamedResponse = await imageUploadRequest.send();
    
          streamedResponse.stream.transform(utf8.decoder).listen((value) {
            print(value);
            return Future.value(value);
          });
        } catch (e) {
          print(e);
        }
    }
    
    0 讨论(0)
  • 2020-11-29 22:48

    This can be achieved using the MultipartRequest class (https://pub.dev/documentation/http/latest/http/MultipartRequest-class.html)

    Change the media type and uri as needed.

    uploadFile() async {
        var postUri = Uri.parse("<APIUrl>");
        var request = new http.MultipartRequest("POST", postUri);
        request.fields['user'] = 'blah';
        request.files.add(new http.MultipartFile.fromBytes('file', await File.fromUri("<path/to/file").readAsBytes(), contentType: new MediaType('image', 'jpeg')))
    
        request.send().then((response) {
          if (response.statusCode == 200) print("Uploaded!");
        });
      }
    
    0 讨论(0)
  • 2020-11-29 22:51

    I use Dio library with put method:

        var formData = FormData.fromMap({
          'simpleParam': 'example',
          'file': await MultipartFile.fromFile(filePath, filename: 'file.jpg')
        });
    
        var dio = Dio();
        dio.options.headers[HttpHeaders.authorizationHeader] = myToken;
    
        var response = new Response(); //Response from Dio
        response = await dio.put(myUrl + "/myApi", data: formData);
    

    The result is in response.data

    0 讨论(0)
提交回复
热议问题