提交和取消时文件名中的精细上传器唯一但升序的 ID

Posted

技术标签:

【中文标题】提交和取消时文件名中的精细上传器唯一但升序的 ID【英文标题】:fine-uploader unique but ascending ID in filename on submit and cancel 【发布时间】:2013-04-19 19:50:14 【问题描述】:

此问题与 Widen Fine-Uploader (https://github.com/Widen/fine-uploader) 相关

我收到了这个分段上传表单。没有自动上传。我想上传几张图片,并以每张图片的唯一名称保护它们。

例如。您选择 4 张图片。通过精细上传上传。我已经有一个画廊ID。所有图像都应使用gallery-id和唯一的升序数字保存在文件名下。像这样:

1234-1.jpg 1234-2.jpg 1234-3.jpg 1234-4.jpg

听起来很简单,但有两个问题:

图像 ID 需要升序而不跳过任何一个。如果您在上传之前取消(删除)文件,则可能会发生这种情况。因此需要在选择所有文件之后设置图像 ID,或者在删除文件时需要填写空 ID。

图像的顺序必须严格遵守您在输入时选择文件的顺序。您选择的第一张图片变成 1234-1.jpg,第二张变成 1234-2.jpg ...所以我无法在重新加载后在 imageHandler 脚本中设置 ID。它将按顺序抓取第一张不能是第一张图像的完整图像,因为我在上传时使用了多个同时连接。

我尝试过类似的方法:

.on('submitted', function(event, id, name) 
    var picId = id+1;

    $(this).fineUploader('setParams', 
        'currentGid': 1234,
        'picId':picId
    );
)

params: 
        fileNum: function() 
        return $(this).attr('id');
        

或使用 fileCount++ 但没有什么像我需要的那样工作..

【问题讨论】:

您当前的方法/尝试(上图)具体有什么问题?什么没有发生而应该发生? 另外,听起来您需要在上传开始之前确定这些 ID。如果用户取消其中一项正在进行的上传会怎样?您很可能最终为第一个文件发送 1234-1,用户在 1234-2 正在进行时取消它,而 1234-3 文件也在进行中。我想我不明白为什么你有这个严格的连续编号要求。为什么不将文件 ID 的值与画廊 ID 一起传递并完成呢?另外,为什么选择文件的顺序如此重要? 我不想取消进度。提交后不需要选项。图片将按图片 ID 顺序显示。可能是一些画廊正在展示连续镜头(讲故事)。这就是我们需要订单的原因。我们多年来一直在使用这种 ID 结构。如果缺少数字,许多不同的脚本将停止工作。我们不想改变它。 【参考方案1】:

您的应用程序听起来有点脆弱,解决这个问题可能符合您的最大利益。

您只需要维护一张您的唯一 ID 的地图以及 Fine Uploader 为每个文件维护的 ID。在您的“提交”处理程序中,将键/值对添加到地图。在“取消”处理程序中,适当调整地图中的项目。在“上传”处理程序中,调用“setParams”API 方法。您的参数将由图库 ID,即您在地图中为该特定文件跟踪的唯一 ID,并确保将文件的 ID 作为您的最后一个参数传递给“setParams”调用。这让 Fine Uploader 知道此参数仅适用于该特定文件。

请参阅callbacks documentation 了解更多信息。

这是一个代码示例:

var fileIds = [];

$('#myFineuploaderContainer').fineUploader(
   //set your options here
)
   .on('submitted', function(event, id, name) 
      fileIds.push(id);
   )
   .on('cancel', function(event, id, name) 
      var fileIdPosition = $.inArray(id, fileIds);      
      fileIds.splice(fileIdPosition, 1);
   )
   .on('upload', function(event, id, name) 
      var params = 
         currentGid: 1234,
         picId: $.inArray(id, fileIds)
      ;

      $(this).fineUploader('setParams', params, id);
   );

【讨论】:

我不明白。地图是什么意思? 一个对象,其中包含每个 Fine Uploader 文件 ID 的属性和与您的唯一 ID 相等的值。 我什至不确定,如果我说得对。抱歉,我是 js 新手。你的意思是,就像一个包含每个文件 ID 的数组?如果我使用值位置来创建我的 ASC id,那可以工作并且不需要第二个 id。但我不知道如何创建这样的数组映射,或者更确切地说删除取消事件的值。 :-/ 我用一些示例代码更新了我的答案。希望这会有所帮助。 这也是我自己想出来的。但你的解决方案仍然比我的好。 :) 非常感谢您对雷的支持!

以上是关于提交和取消时文件名中的精细上传器唯一但升序的 ID的主要内容,如果未能解决你的问题,请参考以下文章

iTunesConnect 中的存档提交失败

css定义为啥不全用CLASS而要用ID

唯一标识名称和大小相同但内容不同的文件

上传文件时检测到取消的拖放操作

我们可以判断用户是否取消了浏览器文件上传吗?

如何在多文件上传器中启用提交按钮直到条件?