Вот решение. Главным было то, что мне нужно было использовать multer
на бэк-энде, согласно предложению @Shashank Vivek:
Передняя часть (угловая):
uploadFiles() {
let fd = new FormData();
fd.append('image', this.selectedFile);
fd.append('timeStamp', Date.now().toString());
try {
this.http.post("http://localhost:3000/selection/test-photo",fd)
// this.http.post("http://localhost:3000/selection/test-photo",this.selectedFile)
.subscribe(
(res) => {
console.log("Successful result: " + JSON.stringify(res))},
(err) => {
console.log("Subscribe error: " + JSON.stringify(err))}
);
}
catch(e) {
console.log("Caught error: " + e);
}
}
Модель данных Backend (Express):
var PhotoSchema = new Schema (
{
timeStamp: {type: Object},
photo: {data: Buffer, contentType: String}
}
)
app.js
var multer = require('multer');
app.use(multer({ dest: './uploads/',
rename: function (fieldname, filename) {
return filename;
},
}
).single('image'));
функция обратного вызова маршрута загрузки фото:
var fs= require('fs');
exports.selection_test_photo = [
(req,res,next) => {
const photo = new Photo();
photo.photo.data = fs.readFileSync(req.file.path);
photo.photo.contentType = 'image/png';
photo.timeStamp = {"value": req.body.timeStamp};
photo.save(function(err){
if (err) {return next(err)};
res.json({"foo": "bar"});
});
},
];