我已经开发了一个画廊,可以上传多个图像。我为此使用dropzone,并且在本地一切正常,直到遇到共享主机上的一些问题。因此,我决定使用块来避免崩溃,但意识到我必须更改服务器脚本。
到目前为止,我的脚本在数据库中插入了相册详细信息,从而调整了图像的大小,并将它们全部保存在一个文件夹中,该文件夹就是相册的ID。然后将“图像”详细信息与album_id一起写入数据库的图像表中。现在的问题是,块上传意味着我要为每个块一遍又一遍地访问我的存储方法,以便创建专辑
每一次。因此,我将需要等到所有块和文件完成后再向商店相册方法发出另一个请求,然后将所有内容写入数据库。
我现在发现chunksUploaded虽然可以使用,但是每次完成1个文件的所有块,而不是所有文件的所有块时,chunksUploaded都会被调用。我可以算一下,当单击“提交”按钮,然后单击“ chunksUploaded”或“成功”事件中的计数器时,我总共拥有多少个文件?但是也许我误解了如何正确使用chunkUploaded的说明,还有更好的方法吗?我确定其他人一定曾经遇到过这个问题,您是如何解决的?
Dropzone.options.myAwesomeDropzone = { // The camelized version of the ID the form element
autoProcessQueue: false,
totalMaxsize: 100,
parallelUploads: 1, // since using the order of the files, can't upload more than 1 file at ones
maxFilesize: 4, // max individual file size
chunking: true, // enable chunking
forceChunking: false, // forces chunking when file.size < chunkSize
parallelChunkUploads: false, // allows chunks to be uploaded in parallel (this is independent of the parallelUploads option)
chunkSize: 1000000, // chunk size 1,000,000 bytes (~1MB)
retryChunks: true, // retry chunks on failure
retryChunksLimit: 10, // retry maximum of 3 times (default is 3)
maxFiles:30,
timeout: 600000,
paramName:'file',
acceptedFiles: ".jpg,.jpeg,.png",
previewTemplate: previewTemplate,
previewsContainer: "#previews", // Define the container to display the previews
clickable: ".fileinput-button", // Define the element that should be used as click trigger to select files.
countImages:0,
chunksUploaded: function(file,done){
???
},
params: function (files, xhr, chunk) {
// console.log(files.length);
if (chunk) {
return {
dzUuid: chunk.file.upload.uuid,
dzChunkIndex: chunk.index,
dzTotalFileSize: chunk.file.size,
dzCurrentChunkSize: chunk.dataBlock.data.size,
dzTotalChunkCount: chunk.file.upload.totalChunkCount,
dzChunkByteOffset: chunk.index * this.options.chunkSize,
dzChunkSize: this.options.chunkSize,
dzFilename: chunk.file.name,
};
}
},
this.on("success", function(files, response) {
myAwesomeDropzone.options.countImages++;
if(myAwesomeDropzone.options.countImages== imageCounter)
{
// do the AJAX call to the store Album method
}