※ サンプルなので送信ボタンを押しても送信されないです。
<form name="fileinfo">
<div>
<label>ユーザー名</label>
<input type="text" name="user">
</div>
<div>
<label>メールアドレス</label>
<input type="email" name="email">
</div>
<div>
<label for="web-worker">
<input id="web-worker" type="file" name="image" accept="image/*" onchange="compressImage(event);">
<span id="web-worker-progress"></span>
</label>
<p id="web-worker-result"></p>
</div>
<button type="submit">送信</button>
</form>
function compressImage(event) {
const file = event.target.files[0]
const result = document.getElementById('web-worker-result')
const progressDom = document.getElementById('web-worker-progress')
result.innerHTML = (file.size / 1024 / 1024).toFixed(2) + 'MB => '
const options = {
maxSizeMB: 1,
maxWidthOrHeight: 1000,
onProgress: onProgress,
}
imageCompression(file, options)
.then(function(output) {
const img = URL.createObjectURL(output)
result.innerHTML += (output.size / 1024 / 1024).toFixed(2) + 'MB<br>'
result.innerHTML += `
<a href="${img}" target="_blank">
<img src="${img}" width="200" alt="">
</a>`
return setSubmitEvent(output)
})
.catch(function(error) {
console.error(error.message)
})
function onProgress(percent) {
progressDom.innerHTML = `(${percent}%)`
if (percent === 100) {
progressDom.innerHTML = ''
}
}
}
function setSubmitEvent(file) {
const form = document.forms.namedItem('fileinfo')
const formData = new FormData(form)
const url = '/post/foo/bar/'
formData.append('image', file, file.name)
form.addEventListener('submit', function(e) {
axios
.post(url, formData, {
headers: {
'content-type': 'multipart/form-data'
}
}
)
.then((res) => console.log(res))
e.preventDefault()
})
}