uploadImage.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import fetch from 'node-fetch'
  2. import { FormData, Blob } from 'formdata-node'
  3. import { fileTypeFromBuffer } from 'file-type'
  4. /**
  5. * Upload file to qu.ax
  6. * Supported mimetypes:
  7. * - `image/jpeg`
  8. * - `image/jpg`
  9. * - `image/png`
  10. * - `video/mp4`
  11. * - `video/webm`
  12. * - `audio/mpeg`
  13. * - `audio/wav`
  14. * @param {Buffer} buffer File Buffer
  15. * @return {Promise<string>}
  16. */
  17. export default async (buffer) => {
  18. const { ext, mime } = await fileTypeFromBuffer(buffer)
  19. const form = new FormData()
  20. const blob = new Blob([buffer.toArrayBuffer()], { type: mime })
  21. form.append('files[]', blob, 'tmp.' + ext)
  22. const res = await fetch('https://qu.ax/upload.php', { method: 'POST', body: form })
  23. const result = await res.json()
  24. if (result && result.success) {
  25. return result.files[0].url
  26. } else {
  27. throw new Error('Failed to upload the file to qu.ax')
  28. }}
  29. /**
  30. * Upload file to qu.ax
  31. * Supported mimetypes:
  32. * - `image/jpeg`
  33. * - `image/jpg`
  34. * - `image/png`
  35. * - `video/mp4`
  36. * - `video/webm`
  37. * - `audio/mpeg`
  38. * - `audio/wav`
  39. * @param {Buffer} buffer File Buffer
  40. * @return {Promise<string>}
  41. */
  42. /*export default async (buffer) => {
  43. const {ext, mime} = await fileTypeFromBuffer(buffer)
  44. const form = new FormData()
  45. const blob = new Blob([buffer.toArrayBuffer()], {type: mime})
  46. form.append('file', blob, 'tmp.' + ext)
  47. const res = await fetch('https://telegra.ph/upload', {
  48. method: 'POST',
  49. body: form,
  50. })
  51. const img = await res.json()
  52. if (img.error) throw img.error
  53. return 'https://telegra.ph' + img[0].src
  54. }*/