我可以找到大量关于如何将分块文件上传与各种 API 和库一起使用的文档,但我无法找到如何仅通过普通 PHP 使用 Dropzone.js 分块文件上传。
文档非常少。我无法在客户端 (JavaScript) 上添加除 jQuery 之外的任何库或 API。
我的问题是如何仅在服务器端使用 Dropzone.js 新的分块文件上传功能和 PHP。(客户端代码赞赏设置)。
这是我到目前为止尝试过的代码:客户端.js文件:
var myDropzone = new Dropzone("div#formDiv",
{
url: "uploadform.php",
params: function (files, xhr, chunk)
{
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;
};
}
},
method: "post",
timeout: 600000,
maxFileSize: 1024,
parallelUploads: 1,
chunking: true,
forceChunking: true,
chunkSize: 1000000,
parallelChunkUploads: true,
retryChunks: true,
retryChunksLimit: 3,
chunksUploaded: function (file, done)
{
// All chunks have uploaded successfully
},
error: function (msg)
{
alert(msg.responseText);
}
});
这是PHP(服务器):
foreach ($_POST as $key => $value)
{
_log('key:' . $key . '; Value:' . $value);
}
上面的代码没有显示任何内容(_log() 只是将其回显到屏幕并将其记录在文本文件中)。
我查看了发送/接收标头,它只向服务器发送一个调用。
我已经验证了 Dropzone.js 使用浏览器中的开发人员工具控制台正确设置了文件拖放区域。
编辑:这是分块上传的文档:https ://gitlab.com/meno/dropzone/wikis/faq#chunked-uploads
分块上传
Dropzone 提供了以块的形式上传文件的可能性。此功能的相关配置选项有:
应该设置为 true 的分块
forceChunking,如果为真,将始终以块的形式发送文件,即使它只是一个块
块大小(以字节为单位)
parallelChunkUploads,如果为 true,则块将同时上传
retryChunks,如果为true,库会在失败时重试上传一个chunk
retryChunksLimit 默认为 3
然后是两个重要的回调。第一个是:params,它可以是一个函数,它接收文件、xhr 和 chunk 作为第一个参数。如果启用了分块,您就知道文件只包含那个文件,而块是保存有关当前块的所有信息的对象。例子:
var chunk = { file: file, index: 0, status: Dropzone.UPLOADING, progress: 0.4 }
有关详细信息,请参阅该参数的文档或查看默认实现的源代码。
第二个重要的回调是 chunksUploaded,它获取完成上传的文件和 done 函数作为第二个参数。在该函数中做任何你需要做的事情,告诉服务器文件完成上传并在准备好时调用 done() 函数。