如何在 Vich Uploader 中提交表单之前显示图像缩略图?
How do Display Image Thumbnail before Form Submit in Vich Uploader?
我正在使用 Vich Uploader Bundle 为每个表单提交一张图片,我希望能够在图片上传之前显示图片的缩略图,因为图片已经上传但没有显示任何内容,或者done 表示发生了任何事情。我尝试将 inject_on_load
设置为 true 但这只是将图像的 url 放在它出现的元素中。
config.yml
# Vich File Uploader
vich_uploader:
db_driver: orm
mappings:
image:
uri_prefix: /uploads/listings/images
upload_destination: '%kernel.root_dir%/../web/uploads/listings/images'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
avatar_image:
uri_prefix: /uploads/avatars
upload_destination: '%kernel.root_dir%/../web/uploads/avatars'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
agency_logo:
uri_prefix: /uploads/avatars
upload_destination: '%kernel.root_dir%/../web/uploads/avatars'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
这是一个使用 jquery 库的简单示例:
在您的模板中,我们假设您包括了您的 jquery 库,例如:
<script src="jquery.min.js"></script>
将正确的 url 填写到项目中的资源 jquery 中。
让我们创建一个简单的 js 函数:
function filePreview(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#uploadForm + img').remove();
$('#uploadForm').after('<img src="'+e.target.result+'" width="450" height="300"/>');
}
reader.readAsDataURL(input.files[0]);
}
}
JavaScript FileReader is used to read the content of the file in
filePreview() function
如果要预览所有类型的文件,请使用 <embed>
标签而不是 <img>
标签。
将以下代码放在 reader.onload 事件中并删除现有代码:
$('#uploadForm + embed').remove();
$('#uploadForm').after('<embed src="'+e.target.result+'" width="450" height="300">');
现在在更改文件输入时调用 filePreview() 方法:
$("#file").change(function () {
filePreview(this);
});
你的 Html 看起来是这样的:
<form method="post" action="upload.php" enctype="multipart/form-data" id="uploadForm">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Upload"/>
</form>
我选择 URL.createObjectURL()
因为它不会在 Firefox 中造成任何冻结,我发现下面的代码片段特别适用于 Vich。
// Preview image thumbnail on upload for vich
$.fn.previewImage = function() {
$(this).change(function(e) {
var url = URL.createObjectURL(e.target.files[0]);
$(this).parents('.vich-image').children('img').remove();
$(this).parents('.vich-image').prepend('<img class="preview_image" src="' + url + '"/>');
})
}
$('#profile_avatarImage_file').previewImage();
$('#profile_logo_file').previewImage();
我正在使用 Vich Uploader Bundle 为每个表单提交一张图片,我希望能够在图片上传之前显示图片的缩略图,因为图片已经上传但没有显示任何内容,或者done 表示发生了任何事情。我尝试将 inject_on_load
设置为 true 但这只是将图像的 url 放在它出现的元素中。
config.yml
# Vich File Uploader
vich_uploader:
db_driver: orm
mappings:
image:
uri_prefix: /uploads/listings/images
upload_destination: '%kernel.root_dir%/../web/uploads/listings/images'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
avatar_image:
uri_prefix: /uploads/avatars
upload_destination: '%kernel.root_dir%/../web/uploads/avatars'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
agency_logo:
uri_prefix: /uploads/avatars
upload_destination: '%kernel.root_dir%/../web/uploads/avatars'
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
这是一个使用 jquery 库的简单示例:
在您的模板中,我们假设您包括了您的 jquery 库,例如:
<script src="jquery.min.js"></script>
将正确的 url 填写到项目中的资源 jquery 中。
让我们创建一个简单的 js 函数:
function filePreview(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#uploadForm + img').remove();
$('#uploadForm').after('<img src="'+e.target.result+'" width="450" height="300"/>');
}
reader.readAsDataURL(input.files[0]);
}
}
JavaScript FileReader is used to read the content of the file in filePreview() function
如果要预览所有类型的文件,请使用 <embed>
标签而不是 <img>
标签。
将以下代码放在 reader.onload 事件中并删除现有代码:
$('#uploadForm + embed').remove();
$('#uploadForm').after('<embed src="'+e.target.result+'" width="450" height="300">');
现在在更改文件输入时调用 filePreview() 方法:
$("#file").change(function () {
filePreview(this);
});
你的 Html 看起来是这样的:
<form method="post" action="upload.php" enctype="multipart/form-data" id="uploadForm">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Upload"/>
</form>
我选择 URL.createObjectURL()
因为它不会在 Firefox 中造成任何冻结,我发现下面的代码片段特别适用于 Vich。
// Preview image thumbnail on upload for vich
$.fn.previewImage = function() {
$(this).change(function(e) {
var url = URL.createObjectURL(e.target.files[0]);
$(this).parents('.vich-image').children('img').remove();
$(this).parents('.vich-image').prepend('<img class="preview_image" src="' + url + '"/>');
})
}
$('#profile_avatarImage_file').previewImage();
$('#profile_logo_file').previewImage();