Heroku не разрешает временные загрузки.Как я могу обойти это ограничение? - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь загружать изображения из MongoDB каждый раз, когда запускается мое приложение, поэтому оно будет работать быстро и так, как изображения находятся в приложении, но Heroku вылетает.Как я могу решить эту проблему?

Вот код, который я пытаюсь использовать:

dir = "./public/media/"
    function getAllImages() {
        Image.find({}, function (err, allImages) {
            if (err) {
                console.log(err);
            } else {
                allImages.forEach(file => {
                    fs.writeFile(dir + file.name, file.img.data, function (err) {
                        if (err) throw err;
                        console.log('Sucessfully saved!');
                    });
                });
            };
        });

В настоящее время у меня есть 24 изображения, которые составляют приблизительно 10 МБ.Я буду использовать их в качестве статических изображений в моем приложении.Я хотел бы получить к ним доступ через example.com/media/foo.jpg и т. Д.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я только что узнал, что проблема в том, что папка, которую я использую (./public/media), была пустой, поэтому heroku (даже если она есть в системе git) не создала папку.Из-за этого код fs.writeFile(dir + file.name, file.img.data, function (err) не работал.Спасибо за ответы.

0 голосов
/ 16 декабря 2018

Пользовательские загрузки не могут быть сохранены в эфемерной файловой системе Heroku .Любые изменения, внесенные в него, будут потеряны при каждом перезапуске dyno, что происходит часто (не реже одного раза в день).Heroku рекомендует хранить загруженные файлы на таком сервисе, как Amazon S3 .

. Вы можете попросить пользователей загружать файлы непосредственно из своих браузеров в S3 или использовать * 1011.* AWS SDK для сохранения файлов с вашего сервера.Также может быть полезна библиотека более высокого уровня, такая как multer-s3.

Обычно не очень хорошая идея хранить файлы в вашей базе данных, но вы можете сохранить указатель на файлы в вашей базе данных.Например, вы можете хранить https://domain.tld/path/to/some/image.jpg в вашей базе данных, если именно там находится файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...