[英]is it possible to preview local images before uploading them via a form?
更具体地说,我想使用带有一个或多个用于图像的文件输入字段的表单。 当这些字段发生更改时,我想在将数据发送到服务器之前显示相关图像的预览。
我尝试了许多 javascript 方法,但总是遇到安全错误。 我不介意使用 java 或 flash,只要对于那些没有它们的用户来说,解决方案会优雅地降级。 (他们不会得到预览,也不会得到烦人的“安装这个东西”。)
有没有人以一种简单、可重用的方式做到这一点?
PS 我知道有一个沙箱,但沙箱是否必须在一个黑暗的、上锁的房间里,所有的窗户都被涂黑了?
不需要花哨的东西。 您所需要的只是createObjectURL
函数,它创建一个可以用作图像src
的 URL,并且可以直接来自本地文件。
假设您使用文件输入元素 ( <input type="file" />
) 从用户的计算机中选择了几张图像。 以下是为其创建图像文件预览的方法:
function createObjectURL(object) {
return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}
function revokeObjectURL(url) {
return (window.URL) ? window.URL.revokeObjectURL(url) : window.webkitURL.revokeObjectURL(url);
}
function myUploadOnChangeFunction() {
if(this.files.length) {
for(var i in this.files) {
var src = createObjectURL(this.files[i]);
var image = new Image();
image.src = src;
// Do whatever you want with your image, it's just like any other image
// but it displays directly from the user machine, not the server!
}
}
}
第一步是找出图像路径。 JavaScript 可以查询文件名/路径的上传控件,但是(出于安全原因)各种浏览器向 JS 引擎显示的内容与向用户显示的内容不同 - 它们倾向于保持文件名完整,因此您至少可以验证它的扩展名,但你可能会得到c:\\fake_path\\
或一些类似的混淆的东西c:\\fake_path\\
到文件名。 在各种浏览器上尝试此操作将使您了解返回为真实路径的内容,以及伪造的内容以及位置。
第二步是显示图像。 如果您知道本地图像的路径,则可以通过带有file://
源 URL 的img
标签显示本地图像,如果用户的浏览器允许file://
方案。 (默认情况下,Firefox 不会。)因此,如果您能让用户告诉您图像的完整路径是什么,您至少可以尝试加载它。
您可以尝试这种方法,尽管它似乎不适用于 IE。
http://saravani.wordpress.com/2012/03/14/preview-of-an-image-before-it-is-uploaded/
编码简单快速。
我把代码放在这里以防万一源死了:
脚本:
<!-- Assume jQuery is loaded -->
<script>
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#img_prev')
.attr('src', e.target.result)
.width(150)
.height(200);
};
reader.readAsDataURL(input.files[0]);
}
}
</script>
在 HTML 中:
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<input type='file' onchange="readURL(this);" />
<img id="img_prev" src="#" alt="your image" />
</body>
这是一个用于上传图像和预览它 的 jQuery + PHP 脚本。
出于安全目的,JavaScript 无法访问本地文件系统。
我只见过这样做的 Java 小程序,例如 Facebook 上的图像上传小程序。 Java 方法的缺点是在运行之前会提示用户信任小程序,这是一种烦恼,但这允许小程序向文件浏览器显示图像预览或做更有趣的事情,例如允许用户上传整个目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.