5

Ich versuche, einen Upload durchzuführen und dann auf das Bild zuzugreifen. Der Upload läuft gut, das Bild wird in Assets/Bilder hochgeladen, aber wenn ich versuche, das Bild vom Browser aus zu öffnen wie http://localhost:1337/images/image-name.jpg, gibt es mir 404. Ich benutze Sails.js nur für Backendzwecke - für API und das Projekt wird mit erstellt - keine Front-End-Option Mein Frontend ist auf AngularJS.Greifen Sie auf hochgeladenes Bild in Sails.js Backend-Projekt zu

Meine Upload-Funktion:

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(); 
      }); 
    }); 
} 

ich das Bild im assets/images Ordner sehen - so etwas wie diese - 54cd1fc5-89e8-477d-84e4-dd5fd048abc0.jpg

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

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

Antwort

5

Dies, weil die Ressourcen geschieht Ihre Anwendung Zugriffe nicht direkt zugegriffen werden aus das Verzeichnis assets, aber das Verzeichnis .tmp im Projektstammverzeichnis.

Die Assets werden in das Verzeichnis .tmp kopiert, wenn die Segel angehoben werden. Alles, was nach dem Aufzug hinzugefügt wurde, ist nicht in .tmp enthalten.

Was ich in der Regel tun, ist auf .tmp und copy die Datei auf assets nach Abschluss hochladen. Auf diese Weise wird assets nicht verschmutzt, falls der Upload aus irgendeinem Grund fehlschlägt.

Lassen Sie uns wissen, ob das funktioniert. Viel Glück!

Aktualisierung Gefunden ein relevantes link dafür.

+1

Vielen Dank. Ich habe es geschafft, einen Upload zu machen und auf das Bild nach dem Tutorial zuzugreifen. Es hat mir wirklich geholfen. Nur eine kleine Sache zu beachten - beim Kopieren der hochgeladenen Datei von Assets in '.tmp'-Ordner, wenn die Ordnerstruktur -' .tmp/public/images/uploads 'dort nicht vorhanden ist, müssen wir es zuerst oder 'fs erstellen 'Fehler bricht die Anwendung, wenn nicht gefangen. –

+1

In der Tat! Sie können das Modul [mkdirp] (https://www.npmjs.com/package/mkdirp) oder [fs-extra] (https://www.npmjs.com/package/fs-extra) verwenden (für zusätzliche Funktionen)) um einen Ordner zu erstellen, wenn dieser nicht mit einem einzigen Befehl existiert. Oder verwenden Sie einfach diese [gut durchdachte Lösung] (http://stackoverflow.com/a/21196961/1100528). – galactocalypse