Javascript 提交和取消时文件名中的精细上载程序唯一但升序ID
此问题涉及加宽精细上载器() 我得到了这个多部分上传表单。没有自动上传。我想上传几张图片,并为每张图片使用一个唯一的名称来保护它们 你选了4张图片。通过精细上传上传。我已经获得了画廊id。所有图像都应使用画廊id和唯一的升序编号保存在文件名下。像这样: 1234-1.jpg 1234-2.jpg 1234-3.jpg 1234-4.jpg 听起来很简单,但有两个问题: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
- 图像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);
});