GithubHelp home page GithubHelp logo

Comments (9)

colbyfayock avatar colbyfayock commented on June 2, 2024

Hey @DongnutLa have you tried passing the buffer into the end method? I'm not terribly familiar with the stream API but it's worked for me before. Here's a svelte example https://github.com/cloudinary-community/cloudinary-examples/blob/main/examples/sveltekit-image-upload/src/routes/%2Bpage.server.js#L34

from cloudinary_npm.

DongnutLa avatar DongnutLa commented on June 2, 2024

Hey @DongnutLa have you tried passing the buffer into the end method? I'm not terribly familiar with the stream API but it's worked for me before. Here's a svelte example https://github.com/cloudinary-community/cloudinary-examples/blob/main/examples/sveltekit-image-upload/src/routes/%2Bpage.server.js#L34

Yeah, I have already tried that, but I'm getting the same error

from cloudinary_npm.

wissam-khalili avatar wissam-khalili commented on June 2, 2024

Hi @DongnutLa,

Perhaps you can also try something along the lines of:

let cloudinary = require("cloudinary").v2;
let streamifier = require('streamifier');

let uploadFromBuffer = (req) => {

   return new Promise((resolve, reject) => {

     let cld_upload_stream = cloudinary.v2.uploader.upload_stream(
      {
        folder: "foo"
      },
      (error: any, result: any) => {

        if (result) {
          resolve(result);
        } else {
          reject(error);
         }
       }
     );

     streamifier.createReadStream(req.file.buffer).pipe(cld_upload_stream);
   });

};

let result = await uploadFromBuffer(req);

You can find more examples here as well.

Hope you find it useful.
Regards,
Wissam

from cloudinary_npm.

colbyfayock avatar colbyfayock commented on June 2, 2024

@DongnutLa i wasn't quite able to get your repo moving "as is" since there was no UI to work from, however

  • I commented out the mimetype and filesize check
  • I updated const buffer ... to const buffer = new Uint8Array(arrayBuffer);
  • you don't have your console.error inside of the if ( err ) check so its going to show up regardless
  • i removed stream.write and instead am using stream.end(buffer)

and with that i was able to successfully post an image file using formdata from the client

see this PR i set on your reproduction repo: https://github.com/DongnutLa/cloudinary-next13/pull/1/files

from cloudinary_npm.

colbyfayock avatar colbyfayock commented on June 2, 2024

oh and important to note, i was never able to reproduce the error you were seeing for some reason...

however i was getting:

[UPLOAD ERROR] TypeError: Cannot read properties of null (reading 'split')

which i think is related to the mimetype code, hence me commenting it out

from cloudinary_npm.

DongnutLa avatar DongnutLa commented on June 2, 2024

Hi @DongnutLa,

Perhaps you can also try something along the lines of:

let cloudinary = require("cloudinary").v2;
let streamifier = require('streamifier');

let uploadFromBuffer = (req) => {

   return new Promise((resolve, reject) => {

     let cld_upload_stream = cloudinary.v2.uploader.upload_stream(
      {
        folder: "foo"
      },
      (error: any, result: any) => {

        if (result) {
          resolve(result);
        } else {
          reject(error);
         }
       }
     );

     streamifier.createReadStream(req.file.buffer).pipe(cld_upload_stream);
   });

};

let result = await uploadFromBuffer(req);

You can find more examples here as well.

Hope you find it useful. Regards, Wissam

It works in development mode, but in a production build fails

from cloudinary_npm.

DongnutLa avatar DongnutLa commented on June 2, 2024

@DongnutLa i wasn't quite able to get your repo moving "as is" since there was no UI to work from, however

  • I commented out the mimetype and filesize check
  • I updated const buffer ... to const buffer = new Uint8Array(arrayBuffer);
  • you don't have your console.error inside of the if ( err ) check so its going to show up regardless
  • i removed stream.write and instead am using stream.end(buffer)

and with that i was able to successfully post an image file using formdata from the client

see this PR i set on your reproduction repo: https://github.com/DongnutLa/cloudinary-next13/pull/1/files

I check your changes, but in production build it's still failing
Did you built the app and tried with next start ? Because in development mode it works well, but in production I'm getting the same 500 error.

from cloudinary_npm.

tamaracloudinary avatar tamaracloudinary commented on June 2, 2024

@DongnutLa if that works in dev mode, try to search for differences between your production and dev environment setups.

from cloudinary_npm.

colbyfayock avatar colbyfayock commented on June 2, 2024

hey @DongnutLa i put together this example:

https://github.com/cloudinary-community/cloudinary-examples/tree/main/examples/nextjs-route-handlers-upload

i deployed it on Vercel and it worked as expected

because it didnt include the same options, I also created a separate test just to make sure

https://github.com/colbyfayock/test-nextjs-route-handlers-upload/blob/main/src/app/api/upload/route.ts#L16

i also had no problems with uploading through this mechanism

one thing i did hit was a similar error when trying to upload a file that was too big. this could come from a few different places

image

though notice the error response

serverless functions have a body size limit: https://vercel.com/guides/how-to-bypass-vercel-body-size-limit-serverless-functions

there are also file size limits depending on your plan from Cloudinary, but higher than that amount: https://support.cloudinary.com/hc/en-us/articles/202520592-Do-you-have-a-file-size-limit-#:~:text=On%20our%20free%20plan%2C%20the,also%20limited%20to%2010%20MB.

where are you deploying your application? the only other consideration is if you're using the vercel Edge runtime but i don't see any configuration in your example using such, as I believe the Node SDK wouldn't be supported there at this time

from cloudinary_npm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.