uploadFile.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import fetch from 'node-fetch';
  2. import {FormData, Blob} from 'formdata-node';
  3. import {fileTypeFromBuffer} from 'file-type';
  4. /**
  5. * Upload epheremal file to file.io
  6. * `Expired in 1 day`
  7. * `100MB Max Filesize`
  8. * @param {Buffer} buffer File Buffer
  9. */
  10. const fileIO = async (buffer) => {
  11. const {ext, mime} = await fileTypeFromBuffer(buffer) || {};
  12. const form = new FormData();
  13. const blob = new Blob([buffer.toArrayBuffer()], {type: mime});
  14. form.append('file', blob, 'tmp.' + ext);
  15. const res = await fetch('https://file.io/?expires=1d', { // 1 Day Expiry Date
  16. method: 'POST',
  17. body: form,
  18. });
  19. const json = await res.json();
  20. if (!json.success) throw json;
  21. return json.link;
  22. };
  23. /**
  24. * Upload file to storage.restfulapi.my.id
  25. * @param {Buffer|ReadableStream|(Buffer|ReadableStream)[]} inp File Buffer/Stream or Array of them
  26. * @return {string|null|(string|null)[]}
  27. */
  28. const RESTfulAPI = async (inp) => {
  29. const form = new FormData();
  30. let buffers = inp;
  31. if (!Array.isArray(inp)) buffers = [inp];
  32. for (const buffer of buffers) {
  33. const blob = new Blob([buffer.toArrayBuffer()]);
  34. form.append('file', blob);
  35. }
  36. const res = await fetch('https://storage.restfulapi.my.id/upload', {
  37. method: 'POST',
  38. body: form,
  39. });
  40. let json = await res.text();
  41. try {
  42. json = JSON.parse(json);
  43. if (!Array.isArray(inp)) return json.files[0].url;
  44. return json.files.map((res) => res.url);
  45. } catch (e) {
  46. throw json;
  47. }
  48. };
  49. /**
  50. *
  51. * @param {Buffer} inp
  52. * @return {Promise<string>}
  53. */
  54. export default async function(inp) {
  55. let err = false;
  56. for (const upload of [RESTfulAPI, fileIO]) {
  57. try {
  58. return await upload(inp);
  59. } catch (e) {
  60. err = e;
  61. }
  62. }
  63. if (err) throw err;
  64. }