Получение ошибки запроса при попытке отправить данные формы с вложением в DRF Backend из React Native Frontend
Я работаю над react native проектом, где мне нужно отправить форму "Request Financial Aid" на backend, Форма также состоит из файла (изображение или pdf), я использовал react native document picker для получения файла, затем я использовал file uri для получения blob.
Следующее, что я сделал, это отправил данные формы в бэкенд, однако мой бэкенд не получает все значения, которые я отправляю из фронтенда, что может быть причиной того, что я получаю Bad Request. Трассировка ошибки здесь
Мой бэкенд работает нормально, когда я отправляю данные из своего веб-приложения, поэтому я знаю, что проблема не в бэкенде.
Вот как я выбираю файл:
const selectFile = async () => {
// Opening Document Picker to select one file
try {
const res = await DocumentPicker.pickSingle({
type: [DocumentPicker.types.allFiles],
});
console.log('res simple', res);
console.log('res : ' + JSON.stringify(res));
//fetch uri from the response
const fileUri = res.uri;
console.log('res : ' + fileUri);
setSingleFile(res);
// handleAcceptedFiles(res);
} catch (err) {
setSingleFile(null);
if (DocumentPicker.isCancel(err)) {
ToastAndroid.show('Canceled', ToastAndroid.SHORT);
} else {
alert('Unknown Error: ' + JSON.stringify(err));
throw err;
}
}
};
Вот как я получаю блоб, используя файл uri.
useEffect(() => {
if (singleFile != null) {
getData();
}
}, [singleFile]);
const getData = async () => {
console.log('inside getData');
// console.log("singleFile",singleFile)
console.log('singlefile', singleFile.uri);
await fetch(singleFile.uri)
.then(response => {
console.log('response', response.blob());
// response.blob()
setBlob(response.blob());
})
.catch(err => {
console.log(err);
});
};
А вот как я отправляю данные в бэкенд при нажатии на кнопку upload:
const uploadData = async () => {
console.log("uploading data");
if (blob != null) {
const fileToUpload = singleFile;
console.log('blob', blob);
const data = new FormData();
// data.append('Attachment', fileToUpload);
data.append('Attachment', blob);
data.append('Address', address);
data.append('CNIC', CNIC);
data.append('Phone_Number', number);
data.append('Status', 'Pending Response');
data.append('Description', description);
data.append('Appointment_id', 'b082564a-67f0-4f3d-96d7-1a441e071ef4');
data.append('Patient_id', email);
data.append('Amount', '4200');
console.log('data', data);
// Alert('data', data);
try{
let res= fetch(`${url}/Finance/requestFA`, {
method: 'POST',
headers: {
// Accept: 'application/json',
'Content-Type': 'multipart/form-data',
Authorization: `Bearer ${user.refresh_token}`,
},
body: data,
})
console.log('res in fecth ', res);
} catch (error) {
console.log('error in upload', error);
}
}
};
Когда я печатаю формуData во frontend, она показывает все значения следующим образом:
blob {"_h": 0, "_i": 2, "_j": [TypeError: Already read], "_k": null, "_o": 0}
LOG data {"_parts": [["Attachment", [Promise]], ["Address", [Object]], ["CNIC", [Object]], ["Phone_Number", [Object]], ["Status", "Pending Response"], ["Description", [Object]], ["Appointment_id", "b082564a-67f0-4f3d-96d7-1a441e071ef4"], ["Patient_id", "testmobile@gmail.com"], ["Amount", "4200"]]}
LOG res in fecth {"_h": 0, "_i": 0, "_j": null, "_k": null}
однако, когда я печатаю запрос в бэкенде, он не показывает некоторые значения, такие как описание, прикрепление адреса и т.д.
<QueryDict: {'Status': ['Pending Response'], 'Appointment_id': ['b082564a-67f0-4f3d-96d7-1a441e071ef4'], 'Patient_id': ['testmobile@gmail.com'], 'Amount': ['4200']}>
'Description'
Bad Request: /Finance/requestFA