2017-08-26 15 views
0

node.jsmulterを使用して、私のHerokuサーバーにファイルをアップロードしています。すべてうまくいきますが、Herokuサーバーが再起動したり、アップロードされたファイルがすべて消えたりすると、URL hitsは 'Not Found'を返します。herokuサーバーの再起動時にmulterでアップロードされたファイルが消えます

これは、ファイルをアップロードするために私のコードです:

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; 

は、私が行方不明ですか私が間違って何をやっているものを教えてください。

+0

[もっと速い回答を得るために、どのような状況で「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow.com/q/326569) - 要約は、ボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があります。これをあなたの質問に追加しないでください。 – halfer

+0

ありがとう、私は次の時間に心に留めておきます:) –

答えて

0

答えはあなたの質問にあります、それは英雄です。アプリケーションが再起動した後でも、デプロイされたファイルのみがサーバー上に残ります。

私はリモートストレージを使用することをお勧めします。私は、メディアストレージのための無料のソリューションとして 'cloudinary'を推奨します。

しかし、あなたがヒーローを記憶装置として使用したい場合は、常にアップグレードするオプションがあります。

+0

ありがとう、あなたのこの勧告は私のために非常に役立つだろう。 –

関連する問題