Я использую https://pub.dev/packages/dio для запросов на флаттер к серверу. Ее мой код:
Future<bool> initialConfig(String name, String status, File image) async {
try {
this._dio = Dio(options);
final id = await UserKeyManagement().retriveKey();
FormData formData = FormData.from(<String, dynamic>{
"profile_pic": UploadFileInfo(image, image.path, contentType: ContentType.parse(lookupMimeType(image.path))),
'id': id,
'display_name': name,
'status': status,
});
final response = await _dio.post('/initial_setup', data: formData);
return response.data['success'];
}catch(e) {
return false;
}
}
Вот мой код сервера фляг для конкретного запроса:
from flask_restful import Resource, reqparse
import werkzeug
from firebase_admin import storage
from uuid import uuid4
from database.shared_db import db
from database.model.display_info_model import DisplayInfoModel
class InitialSetup(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('profile_pic', type=werkzeug.FileStorage, location='files')
parser.add_argument('display_name', type=str, location='form')
parser.add_argument('id', type=str, location='form')
parser.add_argument('status', type=str, location='form')
args = parser.parse_args()
bucket = storage.bucket()
image = args['profile_pic']
img_name = 'profile_pic/' + str(uuid4())
blob = bucket.blob(img_name)
blob.upload_from_file(file_obj=image, content_type=image.content_type)
temp = DisplayInfoModel.query.filter_by(user_id=args['id']).first()
temp.display_name = args['display_name']
temp.status = args['status']
temp.profile_pic = img_name
db.session.commit()
return {
'success': True
}
except:
return {
'success': False
}
Я могу отлично выполнить запрос от почтальона со всеми параметрами в данных формы. Однако он показывает внутреннюю ошибку сервера, когда я пытаюсь из флаттера. Так может кто-нибудь помочь?