|
|
const fetch = require('node-fetch') |
|
|
const FormData = require('form-data') |
|
|
const { fromBuffer } = require('file-type') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const fileIO = async buffer => { |
|
|
const { ext } = await fromBuffer(buffer) || {} |
|
|
let form = new FormData |
|
|
form.append('file', buffer, 'tmp.' + ext) |
|
|
let res = await fetch('https://file.io/?expires=1d', { |
|
|
method: 'POST', |
|
|
body: form |
|
|
}) |
|
|
let json = await res.json() |
|
|
if (!json.success) throw json |
|
|
return json.link |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const RESTfulAPI = async inp => { |
|
|
let form = new FormData |
|
|
let buffers = inp |
|
|
if (!Array.isArray(inp)) buffers = [inp] |
|
|
for (let buffer of buffers) { |
|
|
form.append('file', buffer) |
|
|
} |
|
|
let res = await fetch('https://storage.restfulapi.my.id/upload', { |
|
|
method: 'POST', |
|
|
body: form |
|
|
}) |
|
|
let json = await res.text() |
|
|
try { |
|
|
json = JSON.parse(json) |
|
|
if (!Array.isArray(inp)) return json.files[0].url |
|
|
return json.files.map(res => res.url) |
|
|
} catch (e) { |
|
|
throw json |
|
|
} |
|
|
} |
|
|
|
|
|
module.exports = async function (inp) { |
|
|
let err = false |
|
|
for (let upload of [RESTfulAPI, fileIO]) { |
|
|
try { |
|
|
return await upload(inp) |
|
|
} catch (e) { |
|
|
err = e |
|
|
} |
|
|
} |
|
|
if (err) throw err |
|
|
} |