mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-09-18 22:34:56 +09:00
Hello world
First open source release of Campfire 🎉
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
export default class FileUploader {
|
||||
constructor(file, url, clientMessageId, progressCallback) {
|
||||
this.file = file
|
||||
this.url = url
|
||||
this.clientMessageId = clientMessageId
|
||||
this.progressCallback = progressCallback
|
||||
}
|
||||
|
||||
upload() {
|
||||
const formdata = new FormData()
|
||||
formdata.append("message[attachment]", this.file)
|
||||
formdata.append("message[client_message_id]", this.clientMessageId)
|
||||
|
||||
const req = new XMLHttpRequest()
|
||||
req.open("POST", this.url)
|
||||
req.setRequestHeader("X-CSRF-Token", document.querySelector("meta[name=csrf-token]").content)
|
||||
req.upload.addEventListener("progress", this.#uploadProgress.bind(this))
|
||||
|
||||
const result = new Promise((resolve, reject) => {
|
||||
req.addEventListener("readystatechange", () => {
|
||||
if (req.readyState === XMLHttpRequest.DONE) {
|
||||
if (req.status < 400) {
|
||||
resolve(req.response)
|
||||
} else {
|
||||
reject()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
req.send(formdata)
|
||||
return result
|
||||
}
|
||||
|
||||
#uploadProgress(event) {
|
||||
if (event.lengthComputable) {
|
||||
const percent = Math.round((event.loaded / event.total) * 100)
|
||||
this.progressCallback(percent, this.clientMessageId, this.file)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user