虽然 Fine Uploader 不需要 jQuery(或任何其他库,就此而言),但它确实有一个可选的jQuery 插件。如果你不反对使用 jQuery,我建议你使用 jQuery 插件,因为 jQuery 让生活变得更轻松。
有几种方法可以给这只猫剥皮。无论哪种情况,公式都大致相同。也就是说,让 Fine Uploader 处理文件,为每个提交的文件即时创建输入元素,然后在 Fine Uploader 将相关文件发送到您的服务器之前将这些输入的值传递回 Fine Uploader。
选项 #1 - FineUploader 模式(使用预构建的 UI)
使用FineUploader 模式:
<div id="myFineUploaderContainer"></div>
<button id="uploadSelectedFiles">Upload Selected Files</button>
$('#myFineUploaderContainer').fineUploader({
request: {
endpoint: '/my/upload/endpoint'
},
autoUpload: false
})
.on('submitted', function(event, id, name) {
var fileItemContainer = $(this).fineUploader('getItemByFileId', id);
$(fileItemContainer)
.prepend('<input type="text" name="name">')
.append('<input type="text" name="description">');
})
.on('upload', function(event, id, name) {
var fileItemContainer = $(this).fineUploader('getItemByFileId', id),
enteredName = $(fileItemContainer).find('INPUT[name="name"]').val(),
enteredDescr = $(fileItemContainer).find('INPUT[namme="description"]').val();
$(this).fineUploader('setParams', {name: enteredName, description: enteredDescr}, id);
});
$('#uploadSelectedFiles').click(function() {
$('#myFineUploaderContainer').fineUploader('uploadStoredFiles');
});
您可能需要添加到上面的代码以满足您的需要,并在适当的地方贡献 CSS,但这是一个正确方向的开始。上面,您正在等待 Fine Uploader 在将列表项添加到表示所选文件的 DOM 时回电。当您收到该回调时,您将在列表项的开头添加一个文本输入元素(用于用户提供的名称),并在列表项的末尾添加一个文本输入元素(用于用户提供的描述。然后,就在Fine Uploader 将文件发送到您的服务器,它会调用您的“上传”事件处理程序,您可以在其中读取输入元素的值并将它们提供给 Fine Uploader,通过文件 ID 将它们与文件相关联。
点击处理程序将向 Fine Uploader 发送信号以将文件发送到您的服务器。您的用户将在选择所有文件并根据需要填写输入字段后单击此按钮。通常,Fine Uploader 在选择文件后立即将文件发送到服务器,但这可以通过切换autoUpload
选项来更改。对于您的情况,关闭自动上传是最有意义的。
使用 FineUploader 模式意味着您不必过多担心 UI,因为它已经为您完成了大部分操作,并且您可以免费获得拖放功能,以及进度条和其他 UI 好东西。
选项 #2 - FineUploaderBasic 模式(构建您自己的 UI)
您的第二个选择是使用FineUploaderBasic 模式。这使您可以最大程度地控制您的 UI,但它需要最多的工作,因为您需要完全创建自己的 UI。这意味着您将需要使用大多数回调来构建您的 UI 并使其与 Fine Uploader 的内部状态和相关文件保持同步。
例如,如果您想要进度条,您需要自己渲染它们并根据onProgress
通过 Fine Uploader 调用的回调处理程序定期传递给您的信息更新它们。如果您对 javascript、HTML 和 CSS 非常熟悉,那么所有这些都很好,并且在某些情况下可能是首选。但是,如果您不是,您可能想尝试并坚持使用 FineUploader 模式。
FineUploaderBasic 模式不包括开箱即用的拖放支持,但您可以根据需要轻松集成FineUploader 的独立文件拖放模块。