layui 图片上传。auto=false 的时候,图片删除不了
时间: 2024-03-18 22:44:47 浏览: 177
layui实现图片虚拟路径上传,预览和删除的例子
在 layui 的图片上传组件中,当 `auto` 参数设置为 `false` 时,需要手动调用 `upload.render()` 方法上传图片,而且在上传之前需要将图片的 `base64` 编码作为参数传递给 `upload.render()` 方法。
如果在上传前删除图片,需要注意以下几点:
1. 删除图片后需要将图片的 `base64` 编码从上传队列中移除,以避免上传时上传已删除的图片。
2. 删除图片后需要将图片的 `img` 标签从 DOM 中移除,以避免在重新上传时出现重复的图片。
3. 删除图片后需要重新调用 `upload.render()` 方法上传图片,以保证上传队列中的图片是最新的。
以下是一个实现手动上传并删除图片的示例代码:
```html
<div class="layui-upload">
<button type="button" class="layui-btn" id="upload-btn">上传图片</button>
<div class="layui-upload-list">
<img src="" alt="" class="layui-upload-img">
<input type="hidden" name="img" value="">
</div>
</div>
```
```javascript
// 初始化上传组件
layui.use('upload', function() {
var upload = layui.upload;
var $ = layui.jquery;
var imgSrc = ''; // 记录当前上传的图片的 base64 编码
// 监听上传按钮点击事件
$('#upload-btn').click(function() {
// 选择图片并获取 base64 编码
layui.use('layer', function() {
var layer = layui.layer;
var index = layer.open({
type: 1,
title: '选择图片',
content: '<div class="layui-upload-drag"><i class="layui-icon layui-icon-upload"></i><p>点击或拖拽图片上传</p></div>',
success: function(layero, index) {
upload.render({
elem: layero.find('.layui-upload-drag'),
accept: 'images',
auto: false,
choose: function(obj) {
obj.preview(function(index, file, result) {
imgSrc = result; // 记录图片的 base64 编码
layer.close(index); // 关闭选择图片的弹窗
});
}
});
}
});
});
});
// 监听删除图片按钮点击事件
$('.layui-upload-list').on('click', '.layui-icon-delete', function() {
$(this).parent().remove(); // 从 DOM 中移除图片
imgSrc = ''; // 清空图片的 base64 编码
upload.render({ // 重新初始化上传组件
elem: '#upload-btn',
url: '/upload/',
accept: 'images',
auto: false,
bindAction: '#upload-action',
before: function() {
if (!imgSrc) {
layer.msg('请先选择图片');
return false;
}
this.data = { // 将图片的 base64 编码作为参数传递给后台
img: imgSrc
}
},
done: function(res) {
layer.msg('上传成功');
}
});
});
// 监听上传按钮点击事件
$('#upload-action').click(function() {
if (!imgSrc) {
layer.msg('请先选择图片');
return false;
}
upload.render({
elem: '#upload-btn',
url: '/upload/',
accept: 'images',
auto: false,
bindAction: '#upload-action',
before: function() {
this.data = { // 将图片的 base64 编码作为参数传递给后台
img: imgSrc
}
},
done: function(res) {
layer.msg('上传成功');
}
});
});
});
```
在上面的代码中,我们首先在 HTML 中定义了一个上传组件,包括一个上传按钮和一个图片预览区域。然后在 JavaScript 中初始化了上传组件,并监听了上传按钮和删除图片按钮的点击事件。
当点击上传按钮时,弹出一个选择图片的弹窗,选择图片后获取其 base64 编码,并将其记录在变量 `imgSrc` 中。
当点击删除图片按钮时,从 DOM 中移除图片并清空 `imgSrc` 变量,然后重新初始化上传组件。需要注意的是,在重新初始化上传组件时,需要将图片的 base64 编码作为参数传递给 `before` 回调函数,以便在上传时将其发送给后台。
当点击上传按钮时,将图片的 base64 编码作为参数传递给 `before` 回调函数,并重新初始化上传组件。当上传完成后,显示上传成功的提示信息。
阅读全文