cky-image-public
v1.1.3
Published
public image to public host
Downloads
35
Readme
cky-image-public
cky-image-public is a tool upload image file from local address to some host free or non-free with api_key, auth_token, ...
All bug or issue please send to email: [email protected]
Features!
- public image to imgur, imgbb, dropbox, google drive ...
- upload to all host you config or random, host you want, or fallback if a host upload failed
Installation
$ npm install cky-image-public --save
function
- contructor (options)
options
: object init which host you usecloudinary: true
if you use cloudinary and haveCLOUDINARY_URL
in environment with formatcloudinary://<api_key>:<api_secret>@<cloud_name>
or you can use:
cloudinary: { cloud_name: <your_cloud_name>, api_key: <your_api_key>, api_secret: <your_api_secret> }
drive: { access_token: <your_google_drive_access_token> }
your image will store in your google drivedropbox: { token: <your_dropbox_token> }
your image will store in dropboxfilestack: { api_key: <your_filestack_api_key> }
image will upload tohttps://www.filestack.com/
imageshack: { api_key: <your_imageshack_api_key> }
image will upload tohttps://imageshack.com
, readhttps://imageshack.com/contact/api
for getapi_key
imgbb: true
image will upload tohttps://imgbb.com/
imgbox: true
image will upload tohttps://imgbox.com/
imgeto: true
image will upload tohttps://imge.to/
imggmi: { cookie: <cookie_string_to_bypass_CloudfareProtection> }
cookie string with 3 properties__cfduid
,cf_clearance
,PHPSESSID
for bypass cloud fare protection, image will upload tohttps://imggmi.com/
imgur: true
image will upload tohttps://imgur.com/
pinterest: { token: <your_pinterest_token> }
when you register account complete inhttps://www.pinterest.com/
, you opendev-tool
and find yourcsrftoken
inCookies
postimg: true
image will upload tohttps://postimages.org/
- upload (options, callback)
options
<Object>: object have information to uploadhosts
(optional) : host use to upload (use in case you dont want use hosts you config when init lib), each element isString
and includes in[IMGBB, IMGUR, FILESTACK, DROPBOX, DRIVE, PINTEREST, POSTIMG, IMAGESHACK, IMGBOX, CLOUDINARY, IMGETO, IMGGMI]
, this is all host lib support in current.type
<String|Enum> (required) :ALL
|RANDOM
|FALLBACK
|ROUNDROBIN
, default isALL
ALL
: upload to all host you config when init orhosts
you pass in paramsoptions
RANDOM
: upload random in hostFALLBACK
: try fallback to next host if a host upload failedROUNDROBIN
: upload roundrobin between host
filePath
(required): full address local file image to upload
callback
<function>: callback function when upload complete withparams_1
iserrror
,params_2
isresult
result
is Object, with format:
direct_url: try get direct url return from host image_url: try get page share image of host urls: is array try get all url image return from host (thumb, square, ...) response: is Ojbect response from host, you can use this for get url image{ direct_url: 'xxx', image_url: 'yyy', urls: ['xxx', 'yyy', 'zzz'], response: [Object] }
in other case, you alse use those function with same params:
(filePath, callback, hosts)
withhosts is option
- uploadAll
- uploadFallback
- uploadRoundRobin
- uploadRandom
init lib
you can use this lib by
const { ImgPub } = require('cky-image-public'); // this lib
or
const { Imgur } = require('cky-image-public'); // a fragment of lib
// this lib export some host to use single
module.exports = {
ImgPublic,
ImgBB,
Imgur,
Filestack,
Dropbox,
Drive,
Pinterest,
Postimg,
Imageshack,
Imgbox,
Cloudinary,
Imgeto,
Imggmi,
};
Usage Example
const path = require('path');
// get environment
require('dotenv').config({
path: path.join(__dirname, '../.env')
})
const { ImgPublic } = require('cky-image-public'); // use this lib "ImgPub"
const GOOGLE_ACCESS_TOKEN = process.env.GOOGLE_ACCESS_TOKEN;
const DROPBOX_ACCESS_TOKEN = process.env.DROPBOX_ACCESS_TOKEN;
const IMAGESHACK_API_KEY = process.env.IMAGESHACK_API_KEY;
const PINTEREST_TOKEN = process.env.PINTEREST_TOKEN;
const FILESTACK_API_KEY = process.env.FILESTACK_API_KEY;
let imgPub = new ImgPublic({
cloudinary: true,
drive: {
access_token: GOOGLE_ACCESS_TOKEN,
},
dropbox: {
token: DROPBOX_ACCESS_TOKEN
},
filestack: {
api_key: FILESTACK_API_KEY
},
imageshack: {
api_key: IMAGESHACK_API_KEY
},
imgbb: true,
imgbox: true,
imgeto: true,
imggmi: {
cookie: '__cfduid=de698bbc3991b2917e63ed656f85b40c01565343963; cf_clearance=4d81408955ae900654d67dbc01e43da8388ef98b-1565343967-1800-150; PHPSESSID=nnnsn1obsf87quonbdcinhkr31;'
},
imgur: {
accesstoken: false
},
pinterest: {
token: PINTEREST_TOKEN
},
postimg: true,
});
imgPub.upload({
filePath: path.join(__dirname, 'spiderman.jpg'),
type: 'ALL', // default is ALL, or use uploadAll
}, (err, result) => {
console.log('err=', err);
console.log('result=', JSON.stringify(result));
})
result will like this:
{
"pinterest": {
"direct_url": "https://s3.amazonaws.com/media.pinterest.com/previews/Uw7TyLfH.jpeg",
"image_url": "https://s3.amazonaws.com/media.pinterest.com/previews/Uw7TyLfH.jpeg",
"urls": [
"https://s3.amazonaws.com/media.pinterest.com/previews/Uw7TyLfH.jpeg"
],
"response": {
"width": 360,
"height": 540,
"image_url": "https://s3.amazonaws.com/media.pinterest.com/previews/Uw7TyLfH.jpeg",
"success": true,
"filename": null
}
},
"imggmi": {
"direct_url": "https://cdn1.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-full.jpg",
"image_url": "https://cdn1.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-full.jpg",
"urls": [
"https://cdn1.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-full.jpg",
"https://cdn3.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-prev.jpg"
],
"response": {
"error": false,
"redirect_path": "https://imggmi.com/uploaded/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-full.jpg.html",
"viewerLink": "https://cdn1.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-full.jpg",
"previewLink": "https://cdn3.imggmi.com/uploads/2019/8/14/5256015929cbc8662d97ab41d1c2f5cb-prev.jpg"
}
},
"cloudinary": {
"direct_url": "http://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg",
"image_url": "http://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg",
"urls": [
"http://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg",
"https://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg"
],
"response": {
"public_id": "qeazc3c2yuwxmpjd8k1m",
"version": 1565776619,
"signature": "85e31c922013f5a6b03add4c3517694b4ee21fa3",
"width": 360,
"height": 540,
"format": "jpg",
"resource_type": "image",
"created_at": "2019-08-14T09:56:59Z",
"tags": [],
"bytes": 229156,
"type": "upload",
"etag": "3faa07e151badd17a6c05d1b6379795d",
"placeholder": false,
"url": "http://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg",
"secure_url": "https://res.cloudinary.com/chickyky/image/upload/v1565776619/qeazc3c2yuwxmpjd8k1m.jpg",
"original_filename": "4"
}
},
"imgur": {
"direct_url": "https://imgur.com/GJFQDVk",
"image_url": "https://imgur.com/GJFQDVk",
"urls": [
"https://imgur.com/GJFQDVk"
],
"response": {
"data": {
"hashes": [
"GJFQDVk"
],
"hash": "GJFQDVk",
"deletehash": "DtT5dmh1bth03Cv",
"ticket": false,
"album": false,
"edit": false,
"gallery": null,
"poll": false,
"animated": false,
"height": 540,
"width": 360,
"ext": ".jpg",
"msid": "69b8eee2510e7d123c76d9c62a62d0f7"
},
"success": true,
"status": 200
}
},
"imgeto": {
"direct_url": "https://c.imge.to/2019/08/14/8qJfG.jpg",
"image_url": "https://imge.to/i/8qJfG",
"urls": [],
"response": {
"status_code": 200,
"success": {
"message": "image uploaded",
"code": 200
},
"image": {
"name": "8qJfG",
"extension": "jpg",
"size": 229156,
"width": "360",
"height": "540",
"date": "2019-08-14 15:26:59",
"date_gmt": "2019-08-14 09:56:59",
"title": "4",
"description": null,
"nsfw": "0",
"storage_mode": "datefolder",
"md5": "3faa07e151badd17a6c05d1b6379795d",
"source_md5": null,
"original_filename": "4.jpg",
"original_exifdata": "{\"FileName\":\"4.jpg\",\"FileDateTime\":\"1565776619\",\"FileSize\":\"229156\",\"FileType\":\"2\",\"MimeType\":\"image\\/jpeg\",\"SectionsFound\":\"ANY_TAG, IFD0, THUMBNAIL, EXIF\",\"COMPUTED\":{\"html\":\"width=\\\"360\\\" height=\\\"540\\\"\",\"Height\":\"540\",\"Width\":\"360\",\"IsColor\":\"1\",\"ByteOrderMotorola\":\"1\",\"Thumbnail.FileType\":\"2\",\"Thumbnail.MimeType\":\"image\\/jpeg\"},\"ImageWidth\":\"360\",\"ImageLength\":\"540\",\"BitsPerSample\":[\"8\",\"8\",\"8\"],\"PhotometricInterpretation\":\"2\",\"Orientation\":\"1\",\"SamplesPerPixel\":\"3\",\"XResolution\":\"720000\\/10000\",\"YResolution\":\"720000\\/10000\",\"ResolutionUnit\":\"2\",\"Software\":\"Adobe Photoshop CC 2017 (Windows)\",\"DateTime\":\"2019:07:10 15:43:07\",\"Exif_IFD_Pointer\":\"236\",\"THUMBNAIL\":{\"Compression\":\"6\",\"XResolution\":\"72\\/1\",\"YResolution\":\"72\\/1\",\"ResolutionUnit\":\"2\",\"JPEGInterchangeFormat\":\"386\",\"JPEGInterchangeFormatLength\":\"8982\"},\"ExifVersion\":\"0221\",\"ColorSpace\":\"65535\",\"ExifImageWidth\":\"360\",\"ExifImageLength\":\"540\"}",
"views": "0",
"category_id": null,
"chain": "5",
"thumb_size": "20818",
"medium_size": "0",
"expiration_date_gmt": null,
"likes": "0",
"is_animated": "0",
"file": {
"resource": {
"type": "url",
"chain": {
"image": "https://c.imge.to/2019/08/14/8qJfG.jpg",
"thumb": "https://c.imge.to/2019/08/14/8qJfG.th.jpg"
}
}
},
"id_encoded": "8qJfG",
"filename": "8qJfG.jpg",
"mime": "image/jpeg",
"url": "https://c.imge.to/2019/08/14/8qJfG.jpg",
"ratio": 0.6666666666666666,
"size_formatted": "229.2 KB",
"url_viewer": "https://imge.to/i/8qJfG",
"url_short": "https://imge.to/i/8qJfG",
"image": {
"filename": "8qJfG.jpg",
"name": "8qJfG",
"mime": "image/jpeg",
"extension": "jpg",
"url": "https://c.imge.to/2019/08/14/8qJfG.jpg",
"size": 229156
},
"thumb": {
"filename": "8qJfG.th.jpg",
"name": "8qJfG.th",
"mime": "image/jpeg",
"extension": "jpg",
"url": "https://c.imge.to/2019/08/14/8qJfG.th.jpg",
"size": "20818"
},
"display_url": "https://c.imge.to/2019/08/14/8qJfG.th.jpg",
"display_width": "160",
"display_height": "160",
"views_label": "views",
"likes_label": "likes",
"how_long_ago": "1 second ago",
"date_fixed_peer": "2019-08-14 09:56:59",
"title_truncated": "4",
"title_truncated_html": "4",
"is_use_loader": false
},
"request": {
"type": "file",
"action": "upload",
"timestamp": "1565776618402",
"auth_token": "5d17605c8ba97c5ed63bac93533f56c514ab8c51"
},
"status_txt": "OK"
}
},
"dropbox": {
"direct_url": "https://www.dropbox.com/s/77oykfl87tzyoqw/4.jpg?dl=0",
"image_url": "https://www.dropbox.com/s/77oykfl87tzyoqw/4.jpg?dl=0",
"urls": [
"https://www.dropbox.com/s/77oykfl87tzyoqw/4.jpg?dl=0"
],
"response": {
".tag": "file",
"url": "https://www.dropbox.com/s/77oykfl87tzyoqw/4.jpg?dl=0",
"id": "id:Zj_ASS7ZjvAAAAAAAAAAig",
"name": "4.jpg",
"path_lower": "/4.jpg",
"link_permissions": {
"resolved_visibility": {
".tag": "public"
},
"requested_visibility": {
".tag": "public"
},
"can_revoke": true,
"visibility_policies": [
{
"policy": {
".tag": "public"
},
"resolved_policy": {
".tag": "public"
},
"allowed": true
},
{
"policy": {
".tag": "team_only"
},
"resolved_policy": {
".tag": "team_only"
},
"allowed": false,
"disallowed_reason": {
".tag": "user_not_on_team"
}
},
{
"policy": {
".tag": "password"
},
"resolved_policy": {
".tag": "password"
},
"allowed": false,
"disallowed_reason": {
".tag": "user_account_type"
}
}
],
"can_set_expiry": false,
"can_remove_expiry": true,
"allow_download": true,
"can_allow_download": true,
"can_disallow_download": false,
"allow_comments": true,
"team_restricts_comments": false
},
"preview_type": "photo",
"client_modified": "2019-08-14T09:56:58Z",
"server_modified": "2019-08-14T09:56:58Z",
"rev": "59010c72a27a050c49840",
"size": 229156
}
},
"drive": {
"direct_url": "https://drive.google.com/file/d/1M89xC1MHmn0ixeQgcbKaStrt24CrxRKA/view?usp=sharing",
"image_url": "https://drive.google.com/file/d/1M89xC1MHmn0ixeQgcbKaStrt24CrxRKA/view?usp=sharing",
"urls": [
"https://drive.google.com/file/d/1M89xC1MHmn0ixeQgcbKaStrt24CrxRKA/view?usp=sharing"
],
"response": {
"id": "anyoneWithLink",
"urlShare": "https://drive.google.com/file/d/1M89xC1MHmn0ixeQgcbKaStrt24CrxRKA/view?usp=sharing",
"img_urls": [
"https://lh5.googleusercontent.com/vEMUH-BklYLX7gSda_pvpZL1qZdwcXTXdOKoavIjuMVcHKw2JaZ0Vw7LbHYHff0RiKgHLU0_5rO3ZQ=s2560"
]
}
},
"postimg": {
"direct_url": "https://i.postimg.cc/15q9Cz95/4.jpg",
"image_url": "https://postimg.cc/qzpVg4h9",
"urls": [
"https://i.postimg.cc/15q9Cz95/4.jpg",
"https://postimg.cc/qzpVg4h9",
"https://postimg.cc/qzpVg4h9/e3d29dd5",
"https://i.postimg.cc/qzpVg4h9/4.jpg"
],
"response": {
"status": "OK",
"url": "https://postimg.cc/qzpVg4h9/e3d29dd5",
"link": "https://postimg.cc/qzpVg4h9",
"linkDirect": "https://i.postimg.cc/15q9Cz95/4.jpg",
"linkRemove": "https://postimg.cc/delete/7cgxp2N3/e3d29dd5",
"linkThumbnail": "https://i.postimg.cc/qzpVg4h9/4.jpg"
}
},
"imageshack": {
"direct_url": "http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg",
"image_url": "http://imageshack.com/i/pla7G9jYj",
"urls": [
"http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg",
"http://imageshack.com/i/pla7G9jYj",
"http://imagizer.imageshack.com/img921/9771/a7G9jY.th.jpg"
],
"response": {
"status": "1",
"version": 9,
"timestamp": 1565776621,
"base_url": "http://imagizer.imageshack.com/",
"lp_hash": "pla7G9jYj",
"id": "1336123181",
"rating": {
"ratings": 0,
"avg": 0
},
"files": {
"server": 921,
"bucket": 9771,
"image": {
"size": 224,
"content-type": "image/jpeg",
"filename": "a7G9jY.jpg",
"original_filename": "4.jpg"
},
"thumb": {
"size": 0,
"content": "image/jpeg",
"filename": "a7G9jY.th.jpg"
}
},
"resolution": {
"width": 360,
"height": 540
},
"exif-info": {
"exiforientation": "Horizontal (normal)",
"exifcompression": "JPEG (old-style)",
"exifimagesnum": "1",
"exifwidth": "360",
"exifheight": "540",
"exiffilesize": "224"
},
"class": "r",
"visibility": "yes",
"uploader": {
"ip": "210.245.122.197",
"cookie": "f0beea20000a5e827e5376ba49ba8ca0"
},
"links": {
"image_link": "http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg",
"image_html": "<a href='http://imageshack.com/i/pla7G9jYj' target='_blank'><img src='http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg' alt='Free Image Hosting at www.imageshack.com' border='0'/></a>'",
"image_bb": "[URL=http://imageshack.com/i/pla7G9jYj][IMG]http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg[/IMG][/URL]",
"image_bb2": "[url=http://imageshack.com/i/pla7G9jYj][img=http://imagizer.imageshack.com/img921/9771/a7G9jY.jpg][/url]",
"thumb_link": "http://imagizer.imageshack.com/img921/9771/a7G9jY.th.jpg",
"thumb_html": "<a href='http://imageshack.com/i/pla7G9jYj' target='_blank'><img src='http://imagizer.imageshack.com/img921/9771/a7G9jY.th.jpg' alt='Free Image Hosting at www.imageshack.com' border='0'/></a>'",
"thumb_bb": "[URL=http://imageshack.com/i/pla7G9jYj][IMG]http://imagizer.imageshack.com/img921/9771/a7G9jY.th.jpg[/IMG][/URL]",
"thumb_bb2": "[url=http://imageshack.com/i/pla7G9jYj][img=http://imagizer.imageshack.com/img921/9771/a7G9jY.th.jpg][/url]",
"is_link": "http://imageshack.com/i/pla7G9jYj",
"done": "http://imageshack.com/i/pla7G9jYj"
}
}
},
"imgbb": {
"direct_url": "https://i.ibb.co/Sm2hdGg/4.jpg",
"image_url": "https://ibb.co/M1bYGQH",
"urls": [
"https://i.ibb.co/Sm2hdGg/4.jpg",
"https://ibb.co/M1bYGQH",
"https://i.ibb.co/M1bYGQH/4.jpg"
],
"response": {
"status_code": 200,
"success": {
"message": "image uploaded",
"code": 200
},
"image": {
"title": "4",
"name": "4",
"extension": "jpg",
"original_filename": "4.jpg",
"width": "360",
"height": "540",
"size": 229156,
"thumb_size": "19242",
"medium_size": "0",
"time": "1565776622",
"expiration": "0",
"description": null,
"likes": "0",
"is_animated": 0,
"nsfw": 0,
"id_encoded": "M1bYGQH",
"filename": "4.jpg",
"mime": "image/jpeg",
"url": "https://i.ibb.co/Sm2hdGg/4.jpg",
"size_formatted": "229.2 KB",
"url_viewer": "https://ibb.co/M1bYGQH",
"url_viewer_preview": "https://imgbb.com/",
"url_viewer_thumb": "https://ibb.co/M1bYGQH",
"image": {
"filename": "4.jpg",
"name": "4",
"mime": "image/jpeg",
"extension": "jpg",
"url": "https://i.ibb.co/Sm2hdGg/4.jpg",
"size": 229156
},
"thumb": {
"filename": "4.jpg",
"name": "4",
"mime": "image/jpeg",
"extension": "jpg",
"url": "https://i.ibb.co/M1bYGQH/4.jpg",
"size": "19242"
},
"display_url": "https://i.ibb.co/Sm2hdGg/4.jpg",
"display_width": "360",
"display_height": "540",
"delete_url": "https://ibb.co/M1bYGQH/83cb691bdbe90d529d30525679accfca",
"views_label": "views",
"likes_label": "likes",
"how_long_ago": "moments ago",
"date_fixed_peer": "2019-08-14 09:57:02",
"title_truncated": "4",
"title_truncated_html": "4",
"is_use_loader": false
},
"request": {
"type": "file",
"action": "upload",
"timestamp": "1565776617202"
},
"status_txt": "OK"
}
},
"imgbox": {
"direct_url": "https://images2.imgbox.com/15/de/TJxLy0a1_o.jpg",
"image_url": "https://images2.imgbox.com/15/de/TJxLy0a1_o.jpg",
"urls": [
"https://images2.imgbox.com/15/de/TJxLy0a1_o.jpg",
"https://thumbs2.imgbox.com/15/de/TJxLy0a1_t.jpg",
"https://thumbs2.imgbox.com/15/de/TJxLy0a1_b.jpg"
],
"response": {
"files": [
{
"id": "TJxLy0a1",
"slug": "TJxLy0a1",
"name": "4.jpg",
"name_html_escaped": "4.jpg",
"created_at": "2019-08-14T09:57:03.000Z",
"created_at_human": "August 14, 2019 09:57",
"updated_at": "2019-08-14T09:57:04.198Z",
"gallery_id": "RzA6h5GxOK",
"url": "http://imgbox.com/TJxLy0a1",
"original_url": "https://images2.imgbox.com/15/de/TJxLy0a1_o.jpg",
"thumbnail_url": "https://thumbs2.imgbox.com/15/de/TJxLy0a1_t.jpg",
"square_url": "https://thumbs2.imgbox.com/15/de/TJxLy0a1_b.jpg",
"selected": false,
"comments_enabled": 0,
"comments_count": 0
}
]
}
},
"filestack": {
"direct_url": "https://cdn.filestackcontent.com/6oGt5ArsQ4qsjSKNmEm7",
"image_url": "https://cdn.filestackcontent.com/6oGt5ArsQ4qsjSKNmEm7",
"urls": [
"https://cdn.filestackcontent.com/6oGt5ArsQ4qsjSKNmEm7"
],
"response": {
"name": "4.jpg",
"status": "Stored",
"type": "image/jpeg",
"size": 229156,
"url": "https://cdn.filestackcontent.com/6oGt5ArsQ4qsjSKNmEm7",
"handle": "6oGt5ArsQ4qsjSKNmEm7"
}
}
}
License
ISC