2017-08-26 3 views
0

J'utilise multer dans node.js pour télécharger des fichiers (provenant d'un projet client basé sur Angular) sur mon serveur Heroku. Tout fonctionne correctement, mais lorsque le serveur Heroku redémarre ou tombe en panne, tous les fichiers téléchargés disparaissent, le URL hits renvoie 'Not Found'.Les fichiers téléchargés avec multer disparaissent lorsque le serveur heroku redémarre

Ceci est mon code pour télécharger des fichiers:

var express = require('express'); 
var router = express.Router(); 
var mysql = require('mysql'); 
var multer = require('multer'); 
var pool = require('./dbconnection'); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, '/app/public/images/postImages/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()+'.jpg') 
    } 
}) 

var upload = multer({ storage: storage }) 


router.post('/postImages', upload.single('image'), function(req, res) { 

var userId    = req.body.userId; 
var postTitle   = req.body.postTitle; 
var postDesc   = req.body.postDesc; 
var postLat    = req.body.postLat; 
var postLng    = req.body.postLng; 
var postMediaType  = req.body.postMediaType; 
var postMediaFileName = req.file.filename; 
var postMediaFilePath = req.file.destination; 
var postMediaFileURL = req.file.path; 
postMediaFileURL  = postMediaFileURL.substring(postMediaFileURL.indexOf('images/'), postMediaFileURL.length); 

var inserts = [postTitle, postDesc, postLat, postLng, postMediaType, postMediaFileName, postMediaFilePath, postMediaFileURL, userId]; 
var sql = "INSERT INTO posts (postTitle, postDesc, postLat, postLng, postMediaType, postMediaFileName, postMediaFilePath, postMediaFileURL, userId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
sql = mysql.format(sql, inserts); 
console.log(sql); 

pool.getConnection(function(err, connection) { 
    connection.query(sql, function(error, results) { 
     connection.release(); 
     res.json(results); 
     if(error) throw error; 
    }); 
}); 
}); 

module.exports = router; 

Dites-moi ce que je manque ou ce que je fais mal.

+0

Veuillez lire [Dans quelles circonstances puis-je ajouter "urgent" ou d'autres expressions similaires à ma question, afin d'obtenir des réponses plus rapides?] (// meta.stackoverflow.com/q/326569) - le résumé est que cette Ce n'est pas un moyen idéal de s'adresser aux bénévoles, et il est probablement contreproductif d'obtenir des réponses. Merci de ne pas ajouter ceci à vos questions. – halfer

+0

merci, je vais garder à l'esprit la prochaine fois :) –

Répondre

0

La réponse est dans votre question, c'est heroku. après le redémarrage de l'application, seuls les fichiers déployés resteront sur le serveur.

Je suggère d'utiliser un stockage à distance, je recommande "cloud" comme une solution gratuite pour le stockage des médias. Mais si vous voulez rester avec heroku comme un stockage, il est toujours possible de mettre à niveau.

+0

Merci beaucoup, cette recommandation de la vôtre va être très utile pour moi. –