#node.js #postgresql #react-native #express #multer
Вопрос:
Я новичок в родной реакции. Я не могу загрузить фотографию в свою папку «а». хотя сервер node-mon и react-native не показывают никаких ошибок. но все еще не удается получить ответ из базы данных. я хочу загрузить фотографию в папку и сохранить остальную информацию в своей базе данных postgres.
Код переднего плана
const choosePhotoFromLibrary = () => {
ImagePicker.openPicker({
width: 300,
height: 400,
cropping: true
}).then(image => {
console.log(image.path);
setImage(image.path);
});
}
Функция для вызова API
const submit = async () => {
let FirstName = '';
let LastName = '';
let Age = '';
let Gender = '';
let Town = '';
let Area = '';
let Last_Time = '';
let Image_path = image;
let Description = Appearance;
FirstName = await AsyncStorage.getItem('FirstName') || 'none';
LastName = await AsyncStorage.getItem('LastName') || 'none';
Age = await AsyncStorage.getItem('Age') || 'none';
Gender = await AsyncStorage.getItem('Gender') || 'none';
Town = await AsyncStorage.getItem('Town') || 'none';
Area = await AsyncStorage.getItem('Area') || 'none';
Last_Time = await AsyncStorage.getItem('Last_Time') || 'none';
console.log(FirstName,LastName,Age,Gender,Town,Area,Last_Time,Description, Image_path);
url = 'http://192.168.1.104:3005/api/Users/AddReport/5';
try {
await fetch(url,Image_path{
method: 'post',
headers: {
'Content-Type' : 'application/json',
},
body: JSON.stringify({
user_id : 5,
firstname : FirstName,
lastname : LastName,
age : Age,
sex : Gender,
town : Town,
area : Area,
last_seen_time : Last_Time,
last_seen_appearance : Description,
image_path : Image_path,
})
});
/*await AsyncStorage.removeItem('FirstName');
await AsyncStorage.removeItem('LastName');
await AsyncStorage.removeItem('Age');
await AsyncStorage.removeItem('Gender');
await AsyncStorage.removeItem('Town');
await AsyncStorage.removeItem('Area');
await AsyncStorage.removeItem('Last_Time');*/
} catch(e) {
console.log(e)
}
}
внутренний API
const storage = multer.diskStorage({
destination: './reports/images',
filename: (req, file, cb) => {
return cb(null, `${file.fieldname}_${Date.now()}${path.extname(file.originalname)}`)
}
})
const upload = multer({
storage: storage,
})
//Add Report
app.post("/api/Users/AddReport/:user_id", upload.single('report_image'),async(req, res) => {
console.log(req.file);
try {
const results = await db.query("INSERT INTO REPORT (user_id,firstname,lastname,age,sex,town,area,last_seen_time,last_seen_appearance,image_path) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)",
[req.params.user_id,req.body.firstname,req.body.lastname,req.body.age,req.body.sex,req.body.town,req.body.area,req.body.last_seen_time,req.body.last_seen_appearance,req.file.path]);
console.log(results);
res.status(201).json({
status: "success",
data: {
name: ["Fahad"],
email: ["fahad@gmail.com"],
password: ["1111"],
},
});
}catch (err) {
console.log(err)
}
});
Ответ №1:
Я не знаю, как реагировать, но я знаком с использованием https://www.npmjs.com/package/multer. Когда вы загружаете файл, вам нужно отправить его с помощью multipart/form-data
, потому multer
что не будет обрабатываться ни одна форма, которая не является составной.
изменить : Некоторые примеры кода
Задняя часть
const storageLocal = multer.diskStorage({
destination(req, file, cb) {
cb(null, './src/uploads');
},
filename(req, file, cb) {
cb(null, `${Date.now().toString()}_${file.originalname}`);
}
});
const uploadLocal = multer({ storage: storageLocal });
Внешний интерфейс
function inputDashboard(e){
e.preventDefault();
var formData = new FormData();
var xhr = new XMLHttpRequest();
let storage= e.target.storage.value;
let file = e.target.file.files[0];
formData.append('file', file);
xhr.open('POST', `${uriApi}/${storage}`);
xhr.onload = function(){
var result = JSON.parse(xhr.responseText);
if(xhr.readyState==4amp;amp;xhr.status=='200'){
alert('Done Update');
location.replace(uriDash);
}
else{
alert('Something is wrong');
}
};
xhr.send(formData);
}