1
votes

can you please tell me, what i doing wrong, when try to upload image to cloudinary?

app.js I don't need to store images on server, so i store it in memory. var cloudinary = require('cloudinary'); cloudinary.config({ cloud_name: 'hidden', api_key: 'hidden', api_secret: 'hidden' }); var multer = require('multer'); var storage = multer.memoryStorage() var upload = multer({ storage: storage })

Site form (jade/pug) form(action="/?_csrf="+csrfToken method="post" enctype='multipart/form-data') input(type="file" name="avatar") input(type="submit" value="upload")

App post

   app.post('/', upload.single('avatar'), function(req, res, next){ 
  
     console.log('Should be undefined:', req.file.path);  //yes
      console.log('Should be the buffer:', req.file.buffer); //yes
      cloudinary.uploader.upload(req.file.path, function(result) {           console.log(result) });
    });

and i get error { error: { message: 'Missing required parameter - file', http_code: 400 } }

2

2 Answers

1
votes
i find out how (just use Datauri):

    var dUri = new Datauri();
    dUri.format(path.extname('TEST').toString(), req.file.buffer);

    cloudinary.uploader.upload(dUri.content, function (err, result) {
  if (err) {
    console.log(err);
  } else {
    console.log(result);
  }
});
0
votes

I wasnt able to upload directly from my form to server but i used a trick first i stored files on disk then try to upload my file. i use heroku hosting it means my files will be delete after 30 min. it means i will not have any storage problem.

//#1 i collect data into storage ./image/filename

await file.mv('./image/' + filename, async (err) => {
        if (err) {
            console.log("server'/upload' : faild to upload error =>" + err)
            res.send('Save files => error : ' + err)

        }
        else {
            try {
                const client = await pool.connect()
                //await client.query(`INSERT INTO test_table(id, name) VALUES(${1},'${"test"}')`)
                const result = await client.query(`INSERT into post(musicname,artistname,price, music, picture)
                VALUES ('${textName}','${textArtist}','${textPrice}', '${musicname}','${filename}')`);
                res.send("server'/upload' : inserting new Data is Done.")
                console.log("server'/upload' : inserting new Data is Done.")
                client.release();
              } catch (err) {
                console.error(err);
                res.send("Error " + err);
              }

        }
    })



    await fileMusic.mv('./music/' + musicname, (err) => {
        if (err) {
            console.log(err)
            res.send('save files => error')

        }
    })
//#2 uplaoding collected data into cloudinary
    await cloudinary.v2.uploader.upload('./image/' + filename, {public_id: `${filename}`}, 
    function(error, result){
        result;
        console.log(result.url, error)
    });