Как я могу загрузить аудио файл в Cloudinary с Node.js? - PullRequest
0 голосов
/ 08 мая 2018

Мне очень нужна помощь с загрузкой этого аудиофайла в облачную проблему, которая возникла у меня уже несколько дней. Я много раз пытался заставить это работать, но я все еще борюсь. Я начинающий бэкэнд-разработчик, поэтому, пожалуйста, оцените любую помощь.

Это приложение для mp3-плеера. Когда я загружаю песню, название сохраняется в БД, а Audio - нет.

Это скриншот страницы MP3 PLAYER. Показывает заголовок, сохраненный и обработанный из БД, но не аудиофайл.

Форма загрузки аудио

   <form class="ui form" action="/albums/<%= album._id %>/songs" method="POST" enctype="multipart/form-data">
            <div class="field">
                <label>Song Title:</label>
                <input type="text" id="title" name="song[title]" placeholder="song title...." required>
            </div>
            <div class="field">
                <label>Song file:</label>
                <input type="file" id="song" name="audio" accept="audio/*" required>
            </div>
            <div class="field">
                <input class="fluid ui green button" type="submit" id="submit" value="Enter">
            </div>
            <a href="/albums/<%= album._id %>" class="ui small orange button exit-btn">Exit</a>
     </form>

Модель песни

var mongoose = require("mongoose");

//Album Schema
var audioSchema = new mongoose.Schema({
   title: String,
   audio: String,
   date: {type: Date, default: Date.now()}

});

//exporting the Schema
module.exports = mongoose.model("Audio", audioSchema);

Код сервера / МАРШРУТ

var express             = require("express"),
    router              = express.Router({mergeParams: true}),
    middleware          = require("../middleware"),
    Album               = require("../models/album"),
    Song                = require("../models/songs"),
    multer              = require("multer")

var storage = multer.diskStorage({
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
});
//uploader
var upload = multer({ storage: storage});
var cloudinary = require('cloudinary');
cloudinary.config({ 
   cloud_name: 'proccess.env.CLOUDINARY_NAME',
   api_key: process.env.CLOUDINARY_API_KEY, 
   api_secret: process.env.CLOUDINARY_API_SECRET
});

//Songs new Route
router.get("/albums/:id/songs/new", middleware.isLoggedIn, function(req, res) {
  //find Album by id
  Album.findById(req.params.id, function(err, album) {
      if(err) {
          console.log(err);
      } else {
          res.render("songs/new", {album: album});
      }
  });
});
//Song POST route
router.post("/albums/:id/songs", middleware.isLoggedIn, upload.single("audio"), function(req, res) {
    cloudinary.uploader.upload(req.file.path, function(result) {
        // add cloudinary url for the mp3 to the album object under audio property
        req.body.song.audio = result.secure_url;
        //find Album by ID
        Album.findById(req.params.id, function(err, album) {
            if(err) {
                console.log(err);
                res.redirect("/albums/" + req.params.id);
            } else {

                //Creating Album and saving it to DB
                Song.create(req.body.song, function(err, song) {
                    if(err) {
                        console.log("Opps something went wrong!" + err);
                        res.redirect("back");
                    } else {
                        //save the song to DB
                        song.save();
                        //this saves the songs object inside 
                        album.songs.push(song);
                        //save album
                        album.save();
                        res.redirect("/albums/" + album._id);
                    }
                });

            }

        });
    });    

});


module.exports = router;

1 Ответ

0 голосов
/ 08 мая 2018

Это потому, что вам нужно будет использовать GridFS из MongoDB для хранения данных из файла. https://docs.mongodb.com/manual/core/gridfs/#use-gridfs

Поскольку вы используете Mongoose, проверьте этот модуль: https://www.npmjs.com/package/mongoose-gridfs

Модуль mongoose-gridfs оборачивает модуль gridfs-stream и, похоже, подходит для загрузки двоичных данных. Если вы хотите, вы все равно можете сделать это самостоятельно, следуя этому уроку: http://niralar.com/mongodb-gridfs-using-mongoose-on-nodejs/

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