Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提交和取消时文件名中的精细上载程序唯一但升序ID_Javascript_Jquery_Fine Uploader - Fatal编程技术网

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

Javascript 提交和取消时文件名中的精细上载程序唯一但升序ID,javascript,jquery,fine-uploader,Javascript,Jquery,Fine Uploader,此问题涉及加宽精细上载器() 我得到了这个多部分上传表单。没有自动上传。我想上传几张图片,并为每张图片使用一个唯一的名称来保护它们 你选了4张图片。通过精细上传上传。我已经获得了画廊id。所有图像都应使用画廊id和唯一的升序编号保存在文件名下。像这样: 1234-1.jpg 1234-2.jpg 1234-3.jpg 1234-4.jpg 听起来很简单,但有两个问题: 图像id需要升序而不跳过任何一个。如果在上载之前取消(删除)文件,则可能会发生这种情况。因此,在选择所有文件后需要设置图像id

此问题涉及加宽精细上载器()

我得到了这个多部分上传表单。没有自动上传。我想上传几张图片,并为每张图片使用一个唯一的名称来保护它们

你选了4张图片。通过精细上传上传。我已经获得了画廊id。所有图像都应使用画廊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
    });
})


或者使用fileCount++但没有我需要的任何功能。

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

您只需要维护一个独特ID的映射,以及Fine Uploader为每个文件维护的ID。在“提交的”处理程序中,向映射添加一个键/值对。在“取消”处理程序中,适当地调整映射中的项目。在“upload”处理程序中,调用“setParams”API方法。您的参数将根据gallery ID(您在地图中跟踪的特定文件的唯一ID)进行设置,并确保将文件ID作为最后一个参数传递给“setParams”调用。这让Fine Uploader知道此参数仅适用于该特定文件

有关更多信息,请参阅

下面是一个代码示例:

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);
   });

具体而言,您当前的方法/尝试(如上)有什么问题?什么是不应该发生的?而且,听起来你需要在上传开始之前确定这些ID。如果用户取消其中一个正在进行的上载,该怎么办?您很可能会发送1234-1作为第一个文件,用户会在1234-2进行时取消它,而1234-3文件也在进行中。我想我不明白你为什么有这样严格的连续编号要求。为什么不将文件ID的值与库ID一起传递,然后使用它呢?另外,为什么选择文件的顺序如此重要?我不想提供进度取消。提交后不需要选项。图片将按图片id顺序显示。可能是一些画廊正在展示连续镜头(讲故事)。这就是我们需要订单的原因。我们多年来一直在使用这种ID结构。如果缺少一个数字,许多不同的脚本将停止工作。我们不想改变,我不明白。你对map是什么意思?一个对象,每个精细上传文件ID的属性和值都等于你的唯一ID。我甚至不确定,如果我理解正确的话。对不起,我是js的新手。你是说,像一个包含每个文件id的数组?如果我使用value position创建ASC id,这可能会起作用,并且不需要第二个id。但我不知道如何创建这样的数组映射,或者更确切地说,如何在cancel事件中删除一个值:-/我用一些示例代码更新了我的答案。希望这有帮助。这也是我自己发现的。但你的解决方案还是比我的好。:)非常感谢你的支持,雷!
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);
   });