Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* gak tau, pengen aja bikin uploader yg makek stream :v
- base : https://tmpfiles.org
- by : wolep
- node : v24.11.1
- note : file uploader, powered by tmpfiles.org
- bukan skrep karena udh disediain apinya :v
- kode nya bisa di pakek upload file dengan
- stream, buffer, custom name, custom extension
- auto pick extension pakai library file-type
- auto fallback ke ekstensi bin kalau gagal
- nih paramnya
- {
- filenameWithoutExtension = opsional,
- stream = required *,
- buffer = required *,
- ext = opsional, input nya string contoh 'mp3', 'jpg' gak usah isi titik
- }
- * = musti pilih 1, mau pakek buffer atau stream
- */
- import { fileTypeFromBuffer, fileTypeFromStream } from 'file-type'
- import { Readable } from 'node:stream'
- import fs from 'node:fs'
- const resolveExtension = async ({ stream, buffer, ext }) => {
- if (ext) return ext
- const ft = stream ? await fileTypeFromStream(stream) : await fileTypeFromBuffer((buffer))
- return ft.ext || 'bin'
- }
- const resolveFileName = ({ filenameWithoutExtension }) => filenameWithoutExtension ? filenameWithoutExtension : Date.now().toString(Math.floor(Math.random() * 17) + 20)
- const tmpfileUpload = async ({ filenameWithoutExtension = null, stream = null, buffer = null, ext = null }) => {
- if (stream && buffer) throw Error(`pakai salah satu aja cuy, buffer atau stream. jangan keduanya`)
- if (buffer && !Buffer.isBuffer(buffer)) throw Error(`buffer nya jelek`)
- const extension = await resolveExtension({ stream, buffer, ext })
- const filename = resolveFileName({ filenameWithoutExtension })
- const finalFilename = `${filename}.${extension}`
- // upload
- const file = stream ? new File([Readable.toWeb(stream)], finalFilename) : new File([buffer], finalFilename)
- const fd = new FormData()
- fd.append('file', file)
- const r = await fetch("https://tmpfiles.org/api/v1/upload", {
- method: "POST",
- body: fd,
- });
- if (!r.ok) throw Error(`${r.status} ${r.statusText}\n${await r.text() || `(empty response from server)`}`)
- return await r.json()
- }
- // cara pakai, stream
- const myStream = fs.createReadStream('./anime.jpg')
- tmpfileUpload({ stream: myStream })
- .then(console.log)
- .catch(console.log)
- // cara pakai, buffer
- const myBuffer = fs.readFileSync('./anime.jpg')
- tmpfileUpload({ buffer: myBuffer })
- .then(console.log)
- .catch(console.log)
- /* output
- {
- status: 'success',
- data: { url: 'http://tmpfiles.org/13397312/mc710be13.jpg' }
- }
- {
- status: 'success',
- data: { url: 'http://tmpfiles.org/13397315/224dduehj.jpg' }
- }
- */
- //export default tmpfileUpload
Advertisement
Add Comment
Please, Sign In to add comment