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 ( this module uses async/await )
Care: this module uses fs
under the hood. It means it WON'T work outside the node environment !
To upload pictures from your frontend please check the File API instead
Install
npm install imgbb-uploader
Use with two string params (legacy, LTS)
const imgbbUploader = require("imgbb-uploader");
imgbbUploader(
"your-imgbb-api-key-string",
"absolute/path/to/your/image/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'
},
delete_url: 'https://ibb.co/26Sy9tM/087a7edaaac26e1c940283df07d0b1d7'
}
This async function returns a promise, so this is normal :
console.log(imgbbUploader(myKey, myPath)) // output : Promise { <pending> }
Your data is available in .then((response) => response)
as shown above.
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.
const imgbbUploader = require("imgbb-uploader");
const options = {
apiKey: process.env.IMGBB_API_KEY,
imagePath: "yourImagePath",
name: "yourCustomFilename",
expiration: 3600 ,
};
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
Learn more
This module doesn't support array uploads. For heavy duty, you'll probably have to work with fs.readdir and async forEach (you may also be interested in path ).
For example, you can create a baseDir.js
file wherever it suits you:
// baseDir.js
const path = require('path');
const dirPath = path.join(__dirname);
module.exports = dirPath;
Then you can require this file elsewhere and use something like path.join(myDirpath, "subfolder")
to dig into directories programmatically. Once there, you can f.e. fs.readdir
and iterate forEach
file of that directory.
See fs
documentation and Stack Overflow for more inspiration on the matter.
CHANGELOG
1.2.0
While issues #3 and #4 were closed by users, they still needed to be adressed.
It's now possible to pass 'expiration' and 'name' params to imgBB API through an options object.
Also, the design of the test was terribly, terribly wrong (I always upload the same file, but imgBB API, by checksum or something, is able to tell, thus always returns my original upload as response. I didn't noticed until toying with name & expiration params, but the test were little more than dead code).
Fixed by making each test generate a random image (wrote another module for that), enabling proper testing for the new option object, & overall increased sanity.
Took the opportunity to write a few more tests; not nearly as rigorous as they should be, but still better than the imgBB API ping of old.