imgbb-uploader
Lightweight Nodejs module to upload local pictures files to imgbb API and get display URLs in response.
Primary use is letting imgBB handle the hosting & serving of images.
Compatibility:
Node >= 8 ( async/await )
Care: this module uses fs
under the hood. It WON'T work outside the node environment !
I want to use this client-side
Formats supported by ImgBB API: .jpg
, .png
,.bmp
,.gif
, base64
, url
.
Install
npm install imgbb-uploader
Use with two string params (legacy, LTS)
const imgbbUploader = require("imgbb-uploader");
imgbbUploader("your-imgbb-api-key-string", "path/to/your/image.png")
.then((response) => console.log(response))
.catch((error) => console.error(error));
.then((response) => console.log(response))
output example :
{
id: '26Sy9tM',
title: '5e7599f65f27',
url_viewer: 'https://ibb.co/26Sy9tM',
url: 'https://i.ibb.co/z5FrMR2/5e7599f65f27.png',
display_url: 'https://i.ibb.co/z5FrMR2/5e7599f65f27.png',
size: 260258,
time: '1609336605',
expiration: '0',
image: {
filename: '5e7599f65f27.png',
name: '5e7599f65f27',
mime: 'image/png',
extension: 'png',
url: 'https://i.ibb.co/z5FrMR2/5e7599f65f27.png'
},
thumb: {
filename: '5e7599f65f27.png',
name: '5e7599f65f27',
mime: 'image/png',
extension: 'png',
url: 'https://i.ibb.co/26Sy9tM/5e7599f65f27.png'
},
medium: {
filename: '5e7599f65f27.png',
name: '5e7599f65f27',
mime: 'image/png',
extension: 'png',
url: 'https://i.ibb.co/14kK0tt/5e7599f65f27.png'
},
delete_url: 'https://ibb.co/26Sy9tM/087a7edaaac26e1c940283df07d0b1d7'
}
This async function returns a promise:
console.log(imgbbUploader(myKey, myPath)) // Promise { <pending> }
Use await
or .then
as shown above.
Note about imgBB API: the medium
Object will only be returned for .png
and base64
files !
Use with options object (more features, yay! )
From version 1.2.0 onward, you can also pass an options object as param.
Use it to customize filename and/or a set duration after which the image will be deleted, cf their docs.
The key you'll use for your image depends on its nature. One of these must be defined:
imagePath
in case of a local fileimageUrl
in case of an URL stringbase64string
in case of base64-encoded image
const imgbbUploader = require("imgbb-uploader");
const options = {
apiKey: process.env.IMGBB_API_KEY,
imagePath: "./your/image/path",
name: "yourCustomFilename",
expiration: 3600 ,
imageUrl: "https://placekitten.com/500/500",
base64string:
"iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAEklEQVR42mNcLVNbzwAEjDAGACcSA4kB6ARiAAAAAElFTkSuQmCC",
};
imgbbUploader(options)
.then((response) => console.log(response))
.catch((error) => console.error(error));
This module is tiny & totally unlicensed: to better fit your need, please fork away !
Basic instructions for tweaking
More examples using option object
Using options.base64string:
const imgbbUploader = require("imgbb-uploader");
const base64str = () =>
new Promise((resolve) => {
return setTimeout(() => {
resolve(
"iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAEklEQVR42mNcLVNbzwAEjDAGACcSA4kB6ARiAAAAAElFTkSuQmCC",
);
}, 1000);
});
const myUrl = async (name) => {
return await imgbbUploader({
apiKey: "definitely-not-a-valid-key",
base64string: await base64str(),
name: name,
})
.then((res) => {
console.log(`Handle success: ${res.url}`);
return res.url;
})
.catch((e) => {
console.error(`Handle error: ${e}`);
return "http://placekitten.com/300/300";
});
};
myUrl("Dolunay_Obruk-Sama_<3");
Learn more
This module doesn't support array uploads. For heavy duty, you'll probably have to work with fs.readdir and maybe async forEach. For example, you can create a baseDir.js
file wherever it suits you:
module.exports = require("path").join(__dirname);
Then you can require it elsewhere and use something like path.join(myDirpath, "subfolder")
to dig into directories programmatically.
Once there you can for example fs.readdir
and iterate forEach
file of that directory.
See fs
documentation and Stack Overflow for more inspiration on the matter.
CHANGELOG