Uzywam crypto na serwerze go generowania imion.
GridFs dla mongo dziala na bazie indexu imion - przynajmniej tak mi sie wydaje.
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(20, (err, buf) => { // generating unique names to avoid duplicates
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'media',
metadata: req.body.dateTaken
};
resolve(fileInfo);
});
});
}
Rejestr nazw zdjec trzymam w polu "mediafiles" w dokumencie uzytkownika jako prosty zbior []
Udalo mi sie rozwiazac problem, przynajmniej na razie :)
Wykorzystalem do tego osobne life cycle hooks w vue.js
1. created() // sciaga pliki z bazy do folderu public, zebym mogl podpiac "src" kazdego img jak w kodzie na poczatku postu (oddzielny request dla kazdego pliku). Vuex ma wczesniej wszystkie dane uzytkownika, w tym mediafles[] z nazwami zdjec
created() {
this.items = this.$store.state.StorePatient.visits;
let files = this.$store.state.StorePatient.mediafiles;
if (files.length > 0) {
for(let i=0;i< files.length;i++) {
let innerfiles = files;
visitAxios.post(`http://localhost:3000/client/visits/files/download/${files[i]}`)
.then(res => {
console.log('added file...');
})
.catch( err => console.error(err));
}
}else {
return;
}
},
2.mouted() // uaktualnia lokalna liste komponentu, zeby mogl wygenerowac div-y dzieki v-for
mounted() {
setTimeout(()=>{
this.mediafiles = this.$store.state.StorePatient.mediafiles;
}, 2000);
Dodalem setTimeout, zeby dac wiecej czasu na sciaganie zdjec na serwer zanim dojdzie do generowania listy na stronie, ale chyba jest zbedny, bo mimo asynchronicznosci axios.post(), funkcja created() nie przejdzie do mounted() poki wszystkiego nie skonczy - zgadza sie?
Natomiast wszystkie proby ze streamowaniem prosto do klienta typu readStream.pipe(writeStream) to totalna porazka. Nie moge tego jakos podpiac pod element img, probujac base64 encoding. Jeszcze nie ten lewel....
Moze ktos ma inny pomysl? Jakie sugestie? Dzieki!