javascript - 如何:HTML / jQuery - 文件上传(图像)预览名称+文件
问题描述
我确实欢迎对完成这项任务的不同方法提出建设性的批评和建议。
我正在尝试编写一些 jQuery,它允许用户在当前窗口中预览一个文件或多个文件,而无需重新加载 DOM。
为了实现这一点,我知道的最简单的方法.append()
是在<div id="gallery">
. 我发现自己很难让文件名与正确的图片一起显示,主要问题是图片没有按特定顺序呈现(可能首先呈现最小的文件)。
幸运的是我偶然发现了这篇文章,HTML5 FileReader 如何返回结果?并设法调整代码,使其呈现图片而不是 base64 编码。
$(function(){
$('#file_input').change(function(e){
var files = $(this.files)
$(this.files).each(function(i){
readFile(files[i], function(e) {
var imageSrc = e.target.result
$('#output_field').append('<h4>'+files[i].name+'</h4><img class="preview-thumbs" id="gallery-img" src="' + imageSrc + '">');
})
});
});
function readFile(file, callback){
var reader = new FileReader();
reader.onload = callback
reader.readAsDataURL(file);
}
});
.preview-thumbs {display: block; padding: 10px 0px; width: 250px;}
.thumb-containers {}
#gallery>.img-container {display: inline-block; border: 3px solid #243d51; padding: 5px; width: 350px; border-radius: 20px; text-align: center;}
h4 {color: red; font-size: 20px; font-weight: bold;}
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<input type="file" id="file_input" class="foo" multiple/>
<div id="output_field" class="foo"></div>
我的问题是:
是否有(如果有)更好的方法来完成这项任务?
提前干杯,斯威夫特
解决方案
我最近发布了一个解决完全相同问题的项目。
我在一个单独的类中管理文件上传,该类也涵盖拖放。基本上,您必须在“加载”事件上返回 target.result。
const fileReader = new FileReader();
fileReader.addEventListener("load", this.fileReader_load.bind(this, file.name), false);
fileReader.readAsDataURL(file);
fileReader_load(fileName, event) {
event.target.removeEventListener("load", this.fileReader_load);
this.onFileLoaded(fileName, event.target.result);
}
在此处查看完整的图像加载器:https ://github.com/PopovMP/image-holder/blob/master/public/js/file-dropper.js
图像预览很容易。制作一个图像元素并将其设置src
为 imageData。
推荐阅读
- mysql - MySQL每小时选择记录彼此分开
- android - Android Studio 错误无法解析符号“ArrayAdapter”
- git - 使 github 帐户之间的切换更容易的脚本?
- android - Android中带有视差效果的RecyclerView上面的内容
- ubuntu - Vim“处理 /usr/share/vim/vimrc 时检测到错误”
- c# - 请求被中止:无法在第一次请求时创建 SSL/TLS 安全通道
- eclipse - Springboot 应用程序 jar - 非常慢的视图解析器
- c# - 在 ASP.Net Web API 2 上支持多个授权属性的正确方法
- ssl - Android 9 Google Pixel One 上的 SSL 问题
- reactjs - React-Redux 组件未在商店中显示新道具