【发布时间】:2023-03-10 01:33:02
【问题描述】:
您可以使用 javascript FileReader API 来显示从文件输入字段提供的图像的预览。 这非常有用,因为您不必使用服务器端 php 和 ajax 来显示图像。
我的问题是这样的:
对使用的图像文件的大小有任何限制吗?就像用户要选择 20MB 的图像一样,文件阅读器是否能够处理它?机器内存是否会被耗尽?
目前我只是在我的机器上进行本地测试。我试图加载一个 bmp 文件(53MB!),它需要大约 15 秒来处理并显示在页面上。 其他 1/2MB 的文件通常会立即显示。
这可能不是必需的,但这是我的 HTML 文件:(仅供参考:此代码在支持的浏览器中运行良好)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Dropzone File Upload</title>
</head>
<body>
<img id="uploadPreview" src="default.png" style="width: 100px; height: 100px;" />
<input id="uploadImage" type="file" name="myPhoto" onchange="PreviewImage();" />
<p id="uploadProgress"> </p>
<script type="text/javascript">
function PreviewImage() {
var avatar_image = document.getElementById("uploadImage");
var avatar_preview = document.getElementById("uploadPreview");
var avatar_progress = document.getElementById("uploadProgress");
if ( window.FileReader ) { //if supports filereader
var imgReader = new FileReader();
imgReader.readAsDataURL(avatar_image.files[0]); //read from file input
imgReader.onloadstart = function(e) {
avatar_progress.innerHTML = "Starting to Load";
}
imgReader.onload = function (imgReaderEvent) {
//if file is image
if (
avatar_image.files[0].type == 'image/jpg' ||
avatar_image.files[0].type == 'image/jpeg' ||
avatar_image.files[0].type == 'image/png' ||
avatar_image.files[0].type == 'image/gif' ||
avatar_image.files[0].type == 'image/bmp'
) {
avatar_preview.src = imgReaderEvent.target.result;
}
else {
avatar_preview.src = 'filetype.png';
}
}
imgReader.onloadend = function(e) {
avatar_progress.innerHTML = "Loaded!";
}
}
/* For no support, use ActiveX instead */
else {
document.getElementById("uploadPreview").src = "nosupport.png";
}
};
</script>
</body>
</html>
【问题讨论】:
-
This answer 建议内存是您的主要限制。
-
任何像这样的容量问题总是有相同的答案:它会一直工作直到它不起作用,这取决于客户的能力。廉价智能手机的容量不如拥有大量 RAM 的台式电脑。
标签: javascript filereader