客户端压缩与HTML5和Javascript
Client side compression with HTML5 and Javascript
我在一个web应用程序上工作,我们允许用户上传文件到我们的服务器。我试图在上传文件到服务器之前做客户端压缩。使用HTML5和JavaScript实现这一目标的更好方法是什么呢?
谢谢。
你想要的通用机制是使用FileReader和JavaScript客户端压缩库(即compressjs)。
在2022年,如果浏览器支持CompressionStream, FormData和Response,这几乎太简单了。
在下面的示例中,我使用FormData
从表单中收集所有字段。然后我使用文件中的可读流,并通过压缩流将其管道化。然后我使用Response
从压缩流中读取所有内容,并以blob形式返回。
async function compress(file, encoding = 'gzip') {
try {
return {
data: await new Response(file.stream().pipeThrough(new CompressionStream(encoding)), {
headers: {
'Content-Type': file.type
},
}).blob(),
encoding,
};
} catch (error) {
// If error, return the file uncompressed
console.error(error.message);
return {
data: file,
encoding: null
};
}
}
theForm.addEventListener(
'submit',
(event) => event.preventDefault()
)
theForm.addEventListener(
'input',
async function(event) {
// collect all fields
const fd = new FormData(theForm);
// Get 'file handle' from imput elemen
const file = fd.get('theFile');
if (!file) return
const encoding = fd.get('theEncoding');
const compressed = await compress(file, encoding);
theMessage.value = [
'Compressed with', compressed.encoding,
'Source file was', file.size, 'bytes',
'and the compressed file', compressed.data.size,
'saving', ((1 - compressed.data.size / file.size) * 100)
.toFixed(0),
'%.'
].join(' ')
}
)
form>* {
display: block;
width: 100%;
}
<form id="theForm">
<select name="theEncoding">
<option>gzip</option>
<option>deflate</option>
<option>deflate-raw</option>
</select>
<input type="file" name="theFile" id="theFile">
</form>
<output id="theMessage"></output>
相关文章:
- JavaScript HTML5画布未显示
- 在Javascript HTML5+Canvas中处理精灵鼠标点击的最佳方式
- Javascript HTML5 更改图标用于 fa-play
- Javascript/Html5 Download zip from url
- JavaScript/HTML5音频:在Android Chrome中播放用户通过文件选择器加载的mp3文件
- 在Javascript HTML5 Canvas中旋转绘制的圆圈
- 在 JavaScript/HTML5 中显示 3D 模型
- Javascript/HTML5 - 更改鼠标事件上的文本
- Javascript html5 视频在特定时间添加/删除类
- 运动跟踪 JavaScript = HTML5/canvas 游戏输入/控制
- 如何提高javascript html5程序的整体性能:是否可以在两台计算机上同步两个版本
- 人脸检测 javascript/html5/flash
- 了解如何在javascript/HTML5/NodeJS中实现客户端-服务器-客户端基础结构
- javascript html5 drawImage 带有来自不同域的图像
- 用 Javascript/HTML5 编写的 Windows 应用商店应用程序的代码度量选项
- JavaScript/HTML5/jQuery 拖放上传 - “未捕获的类型错误:无法读取未定义的属性'文件
- Javascript/HTML5使用图像填充画布
- JavaScript/HTML5 addEventListener() 不使用
- 表杂乱无章的问题.Javascript HTML5.
- JavaScript/HTML5 从表单中获取 URL 并在新的 Window iframe 中打开它