fine-uploader - 如何与其他输入字段结合使用?

时间:2013-06-05 12:35:05

标签: javascript post input fine-uploader

我想在一个典型的形式中使用FineUploader:

<form enctype="multipart/form-data" method="post"">
    <input name="fileupload" type="file" ">
    <input type="text" name="title" size="45" maxlength="100">
    <textarea name="description" cols="40" rows="8"></textarea>
    <input type="hidden" name="op" value="Add">
<input type="submit" value="Upload">

所以我实际上想主要替换<input name="fileupload" type="file" ">部分。

不幸的是我对JavaScript和jQuery jet不是很熟悉,也不知道如何做到这一点。 我找不到任何示例代码,其中FineUploader与其他数据一起使用。

我将不胜感激任何帮助!

由于 Kashuda

1 个答案:

答案 0 :(得分:5)

虽然Fine Uploader不需要jQuery(或其他任何库),但它确实有一个可选的jQuery plug-in。如果你不反对使用jQuery,我建议你使用jQuery插件,因为jQuery让生活更轻松。

有两种方法可以抚养这只猫。在任何一种情况下,公式大致相同。也就是说,让Fine Uploader处理文件,为每个提交的文件即时创建输入元素,然后在Fine Uploader将相关文件发送到服务器之前将这些输入的值传回Fine Uploader。

选项#1 - FineUploader模式(使用预建UI)

使用FineUploader mode

<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将文件发送到您的服务器,它会调用您的“upload”事件处理程序,您可以在其中读取输入元素的值并将它们提供给Fine Uploader,通过文件ID将它们与文件相关联.Fine Uploader将包含此信息以及多部分编码的POST请求中的文件,它将发送到您的服务器。

点击处理程序将通知Fine Uploader将文件发送到您的服务器。您的用户在选择所有文件并在适当时填写输入字段后将单击此按钮。通常,Fine Uploader会在选择文件后立即将文件发送到服务器,但可以通过切换autoUpload选项来更改文件。根据您的情况,关闭自动上传是最有意义的。

使用FineUploader模式意味着您不必过多担心用户界面,因为大多数操作都是为您完成的,并且您可以使用它。删除功能,以及进度条和其他UI好东西免费。

选项#2 - FineUploaderBasic模式(构建您自己的UI)

您的第二选择是使用FineUploaderBasic mode。这使您可以最大程度地控制UI,但它需要最多的工作,因为您需要完全创建自己的UI。这意味着您需要使用大多数callbacks来构建您的UI,并使其与Fine Uploader的内部状态和相关文件保持同步。

例如,如果你想要进度条,你需要自己渲染它们并根据定期通过Fine Uploader调用的onProgress回调处理程序传递给你的信息来更新它们。所有这些都很好,如果您对javascript,HTML和CSS非常熟悉,在某些情况下可能更受欢迎。但是,如果你不是,你可能想尝试坚持使用FineUploader模式。

FineUploaderBasic模式不包括开箱即用的拖放支持,但如果您愿意,可以轻松集成Fine Uploader's standalone File Drag & Drop module