簡體   English   中英

使用 file_picker flutter 將圖像上傳到 nodejs 服務器

[英]uploading image using file_picker flutter to a nodejs server

我有一個 api 提供以下數據作為響應:

{
    "status": 200,
    "msg": "Data Found",
    "data": {
        "id": 104,
        "firstName": "aaa",
        "lastName": "aaa",
        "surname": "aaa",
        "email": "email@email.care",
        "phone": "090909090",
        "age": "23",
        "gender": "M",
        "height": "163",
        "bloodGroup": null,
        "weight": "72",
        "status": null,
        "fileId": 228,
        "password": "pass",
        "file": {
            "id": 228,
            "filename": "images.jpg",
            "path": "user/images1613558976577.jpg",
            "alt": "shafa care"
        }
    },
    "success": true,
    "token": "some token",
    "userAccess": "some data"
}

響應中的“file”參數用於保存用戶上傳的圖像。 對於我的更新方法,用戶需要將他們的令牌作為 header 傳遞給更新 api。 為了更新文件參數,我嘗試了許多不同的方法來更新用戶圖像。 下面的代碼使用多部分表單數據來更新現有的文件圖像。

Future<AuthModel> updateImage(File imageFile, AuthModel authModel) async{
      final String _accessToken = '${authModel.token}';
  final String url =
      '${GlobalConfiguration().getString('api_base_url')}auth/user/update';

  var stream = new http.ByteStream(imageFile.openRead());
  var length = await imageFile.length();
  var uri = Uri.parse(url);
  var request = new http.MultipartRequest("POST", uri);
  request.headers['Authorization'] = _accessToken;
  // request.headers['Content-Type'] = 'multipart/form-data';
  var multipartFile = new http.MultipartFile('file', stream, length, filename: basename(imageFile.path));
  request.files.add(multipartFile);
  var response = await request.send();
  print("updating: " + response.statusCode.toString());
  response.stream.transform(utf8.decoder).listen((event) {
    currentUser = authModelFromJson(event);
    print("updating img: " + event);
  });
  return currentUser;
}

上面的function即使找到數據也不更新我的文件參數。 我只是得到同樣的舊回應。 filepicker 還會發送用戶從圖庫中選擇的正確圖像路徑。 我也嘗試使用 http.client.post 方法,使用令牌作為 header 和 'file' 參數作為正文,但隨后找不到數據,因為 Z8A5DA52ED126447D359E70C05721A8.AAZ 僅接受上傳的表格時接受圖像

它使用表單數據發布方法在 postman 中工作。 郵差

我是 flutter 的新手,還在學習。 我被困在這里好幾天沒有任何解決辦法。 如何從我的 flutter 應用程序更新文件參數? 任何幫助表示贊賞。

這是示例代碼。 我希望這可以幫助你!

 static Future<bool> uploadFileAsFormData(
      String url, File file) async {
    try {
      var uri = Uri.parse(_buildUrl(url));
      var request = http.MultipartRequest('POST', uri);
      request.files.add(await http.MultipartFile.fromPath('file', file.path));

      var res = await request.send();
      if (res.statusCode == 200) {
        return true;
      } else {
   
        return false;
      }
    } catch (err) {

      return false;
    }
  }

您可以使用此Dio上傳圖像,如以下code所示:

Dio dio = Dio();

var formData = FormData();
for (var file in filePath) {
  formData.files.addAll([MapEntry("files", await MultipartFile.fromFile(file)),]);
  print(formData.length);
}

var response = await dio.post(url
    data: formData,
    options: Options(headers: {
      'Authorization': _accessToken
    }));

if(response.statusCode == 200){
print(response.data.toString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM