引自免费微信小程序:皆我百晓生
要实现这个功能,您可以使用HTML5的File API以及jQuery的插件(例如:blueimp/jQuery-File-Upload)。下面是一个详细的步骤和示例代码,用于创建一个可拖放、支持多选文件、不覆盖已有文件且具有删除选项的文件上传组件。
首先,你需要引入必要的库:
- Bootstrap CSS 和 JS
- jQuery
blueimp/jQuery-File-Upload:这是一个强大的文件上传插件,支持多种功能,包括拖放上传、预览、多选等。- 如果需要删除按钮,可以使用Font Awesome图标库,提供删除图标
HTML部分:
Multiple File Upload
Multi-File Upload
JavaScript部分 (upload.js):
$(function () {
$('#fileuploader').fileupload({
url: 'your_upload_url',
type: 'POST',
autoUpload: true,
maxNumberOfFiles: null, // Set this to allow unlimited uploads
sequentialUploads: false,
add: function (e, data) {
var files = e.target.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
var fileInput = $('');
fileInput.val(file.name);
data.files.push(fileInput[0]);
}
data.submit.call(data.context, data);
},
done: function (e, data) {
$.each(data.result.files, function (index, file) {
if (file.error) {
console.log("Error uploading " + file.name + ": " + file.error);
} else {
console.log("Successfully uploaded " + file.name);
}
});
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('.progress-bar').css('width', progress + '%').text(progress + '%');
}
}).on('fileuploadprocessalways', function (e, data) {
var index = data.index,
file = data.files[index],
node = $(data.context.children()[index]);
if (file.preview) {
node.find('.preview').append('
');
}
if (file.error) {
node.addClass('error');
}
});
// Add delete button functionality
$('body').on('click', '.delete-button', function (e) {
var $this = $(this),
input = $this.prev('input[type="hidden"]');
$this.parent().remove();
input.remove();
});
});
这个示例代码中,我们使用了blueimp/jQuery-File-Upload插件来处理文件上传。add事件用于将选中的文件名添加到隐藏输入框中,并提交数据。done事件用于处理上传结果,显示成功或错误信息。progressall事件用于更新进度条。此外,我们还添加了一个删除按钮的功能,当用户点击时,会移除对应的文件和隐藏输入框。
为了完成整个功能,您还需要在后端服务器上设置一个接受文件上传的URL,并处理接收到的文件。这通常涉及读取请求体中的文件流,并将其保存到服务器上的某个位置。
注意,这只是一个基础示例,根据您的实际项目需求可能需要进行一些调整。例如,您可能需要对文件类型、大小进行验证,或者添加更复杂的进度反馈等。
