wolfyflutter

72. tmpfiles.org [uploader]

Dec 3rd, 2025 (edited)
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 2.70 KB | Source Code | 0 0
  1. /* gak tau, pengen aja bikin uploader yg makek stream :v
  2.   base : https://tmpfiles.org
  3.   by   : wolep
  4.   node : v24.11.1
  5.   note : file uploader, powered by tmpfiles.org
  6.          bukan skrep karena udh disediain apinya :v
  7.          kode nya bisa di pakek upload file dengan
  8.          stream, buffer, custom name, custom extension
  9.          auto pick extension pakai library file-type
  10.          auto fallback ke ekstensi bin kalau gagal
  11.          nih paramnya
  12.          {
  13.          filenameWithoutExtension = opsional,
  14.          stream = required *,
  15.          buffer = required *,
  16.          ext = opsional, input nya string contoh 'mp3', 'jpg' gak usah isi titik
  17.          }
  18.          * = musti pilih 1, mau pakek buffer atau stream
  19. */
  20.  
  21. import { fileTypeFromBuffer, fileTypeFromStream } from 'file-type'
  22.  
  23. import { Readable } from 'node:stream'
  24. import fs from 'node:fs'
  25.  
  26. const resolveExtension = async ({ stream, buffer, ext }) => {
  27.     if (ext) return ext
  28.     const ft = stream ? await fileTypeFromStream(stream) : await fileTypeFromBuffer((buffer))
  29.     return ft.ext || 'bin'
  30. }
  31. const resolveFileName = ({ filenameWithoutExtension }) => filenameWithoutExtension ? filenameWithoutExtension : Date.now().toString(Math.floor(Math.random() * 17) + 20)
  32.  
  33. const tmpfileUpload = async ({ filenameWithoutExtension = null, stream = null, buffer = null, ext = null }) => {
  34.     if (stream && buffer) throw Error(`pakai salah satu aja cuy, buffer atau stream. jangan keduanya`)
  35.     if (buffer && !Buffer.isBuffer(buffer)) throw Error(`buffer nya jelek`)
  36.     const extension = await resolveExtension({ stream, buffer, ext })
  37.     const filename = resolveFileName({ filenameWithoutExtension })
  38.     const finalFilename = `${filename}.${extension}`
  39.  
  40.     // upload
  41.     const file = stream ? new File([Readable.toWeb(stream)], finalFilename) : new File([buffer], finalFilename)
  42.     const fd = new FormData()
  43.     fd.append('file', file)
  44.     const r = await fetch("https://tmpfiles.org/api/v1/upload", {
  45.         method: "POST",
  46.         body: fd,
  47.     });
  48.     if (!r.ok) throw Error(`${r.status} ${r.statusText}\n${await r.text() || `(empty response from server)`}`)
  49.     return await r.json()
  50. }
  51.  
  52. // cara pakai, stream
  53. const myStream = fs.createReadStream('./anime.jpg')
  54. tmpfileUpload({ stream: myStream })
  55.     .then(console.log)
  56.     .catch(console.log)
  57.  
  58. // cara pakai, buffer
  59. const myBuffer = fs.readFileSync('./anime.jpg')
  60. tmpfileUpload({ buffer: myBuffer })
  61.     .then(console.log)
  62.     .catch(console.log)
  63.  
  64. /* output
  65. {
  66.   status: 'success',
  67.   data: { url: 'http://tmpfiles.org/13397312/mc710be13.jpg' }
  68. }
  69. {
  70.   status: 'success',
  71.   data: { url: 'http://tmpfiles.org/13397315/224dduehj.jpg' }
  72. }
  73. */
  74.  
  75. //export default tmpfileUpload
Advertisement
Add Comment
Please, Sign In to add comment