在上传之前查看从客户端文件系统中选择的图像?

Posted

技术标签:

【中文标题】在上传之前查看从客户端文件系统中选择的图像?【英文标题】:View image selected from file-system on client-side before upload? 【发布时间】:2011-09-09 04:36:38 【问题描述】:

我在表单上有一个输入标签,用于选择要上传的图像。

<div id="lowresDemo">
    <img src="some-url" />
</div>
<input type="file" id="FileToUpload" name="FileToUpload" />

我尝试更改输入旁边表单上显示的缩略图,以向用户确认他们的选择是使用以下 jquery 代码的预期:

$('#FileToUpload').change(function () 
    $('#lowresDemo img').attr('src', $(this).val());
);

...这在任何浏览器中都不起作用,出于我认为的浏览器安全原因(我记得上次我在几年前做过类似的事情)。

问题: 有没有办法在用户提交表单之前呈现用户对图像的选择——不仅仅是输入字段中值的文件路径+名称,而是显示他们选择的文件的缩略图?

或者现代浏览器安全性会阻止这种情况发生吗?

【问题讨论】:

【参考方案1】:

可以使用 File API(IE 不支持 File API)

<input type="file">
<script type="text/javascript">
    $(document).ready(function() 
    $("input").change(function(e) 

    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) 
        var file = e.originalEvent.srcElement.files[i];

        var img = document.createElement("img");
        var reader = new FileReader();
        reader.onloadend = function() 
            img.src = reader.result;
        
        reader.readAsDataURL(file);
        $("input").after(img);
    
);
    );
</script>

工作示例:http://jsfiddle.net/ugPDx/

【讨论】:

已修复,使用 append 之前将图像添加到输入字段中,使其不可见。 这似乎只在 Chrome 中有效,在 IE 和 Firefox 15 中失败。 我已经修改了小提琴以在 Firefox 上工作,可能在 IE9 上工作,但未经测试:jsfiddle.net/ugPDx/825 IE10 和 11 都支持文件 API。之前版本的用户不要再拖我们后腿了 :) 这是一个绝妙的答案,我认为这不可能。它在 Firefox 中运行。【参考方案2】:

上传图片前无法进行操作。

但换一种方式想一想——用户“不在乎”图片是否已上传——您可以在他们上传后显示缩略图,并显示一个确认复选框。 Gmail 使用他们的电子邮件附件执行此操作 - 一旦您选择要附加的文件,上传就会开始。但是用户始终可以选择取消选中该文件,并且它不会包含在电子邮件中。

【讨论】:

edit:@Peeter 的 html5 文件 api (w3.org/TR/FileAPI) 非常有趣。太糟糕了,没有跨浏览器支持。

以上是关于在上传之前查看从客户端文件系统中选择的图像?的主要内容,如果未能解决你的问题,请参考以下文章

从 url 获取图像文件对象

onChange 事件在选择文件之前触发

如何在上传到服务器之前减小图像文件大小

取消文件上传时删除图像预览

如何从内部存储中选择文档和图像文件并上传到服务器?

文件上传问题 Android WebView