5

Sto provando a fare un upload e quindi accedere all'immagine. Il caricamento sta andando bene, caricando l'immagine in risorse/immagini, ma quando provo ad accedere all'immagine dal browser come http://localhost:1337/images/image-name.jpg mi dà 404. Uso Sails.js solo per scopi di backend - per API e il progetto è stato creato con Opzione --no-front-end. La mia front end è su AngularJS.Accedi all'immagine caricata nel progetto di backend Sails.js

La mia funzione di upload:

avatarUpload: function(req, res) { 
    req.file('avatar').upload({ 
     // don't allow the total upload size to exceed ~10MB 
     maxBytes: 10000000, 
     dirname: '../../assets/images' 
    }, function whenDone(err, uploadedFiles) { 
     console.log(uploadedFiles); 
     if (err) { 

      return res.negotiate(err); 
     } 

     // If no files were uploaded, respond with an error. 
     if (uploadedFiles.length === 0) { 

      return res.badRequest('No file was uploaded'); 
     } 

     // Save the "fd" and the url where the avatar for a user can be accessed 
     User 
      .update(req.userId, { 

       // Generate a unique URL where the avatar can be downloaded. 
       avatarUrl: require('util').format('%s/user/avatar/%s', sails.getBaseUrl(), req.userId), 

       // Grab the first file and use it's `fd` (file descriptor) 
       avatarFd: uploadedFiles[0].fd 
      }) 
      .exec(function (err){ 
       if (err) return res.negotiate(err); 
       return res.ok(); 
      }); 
    }); 
} 

vedo l'immagine nella cartella assets/images - una cosa del genere - 54cd1fc5-89e8-477d-84e4-dd5fd048abc0.jpg

http://localhost:1337/assets/images/54cd1fc5-89e8-477d-84e4-dd5fd048abc0.jpg - dà 404

http://localhost:1337/images/54cd1fc5-89e8-477d-84e4-dd5fd048abc0.jpg - dà 404

risposta

5

Questo accade perché le risorse tuoi accessi di applicazione non sono accessibili direttamente dal la directory assets ma la directory .tmp nella root del progetto.

Le risorse vengono copiate nella directory .tmp quando le vele vengono sollevate, quindi qualsiasi cosa aggiunta dopo il sollevamento non è presente in .tmp.

Quello che faccio normalmente è caricare su .tmp e copy il file su assets al termine. In questo modo assets non è inquinato nel caso in cui il caricamento non riesca per qualsiasi motivo.

Facci sapere se questo funziona. In bocca al lupo!

Aggiornamento Trovato un numero rilevante link per questo.

+1

Grazie mille. Sono riuscito a fare un upload e ad accedere alla foto seguendo il tutorial che hai fornito. Mi ha davvero aiutato. Solo una piccola cosa da notare - quando copi il file caricato dalle risorse nella cartella '.tmp', se la struttura delle cartelle -' .tmp/public/images/uploads 'non è presente, dobbiamo prima crearla o 'fs 'l'errore interrompe l'applicazione se non viene rilevato. –

+1

Davvero! Puoi utilizzare il modulo [mkdirp] (https://www.npmjs.com/package/mkdirp) o [fs-extra] (https://www.npmjs.com/package/fs-extra) (per funzionalità aggiuntive) per creare una cartella se non esiste utilizzando un singolo comando. O semplicemente usa questa [soluzione ben ragionata] (http://stackoverflow.com/a/21196961/1100528). – galactocalypse