如何使用 Dropzone.js 进行分块文件上传(仅限 PHP)?

     2023-05-08     199

关键词:

【中文标题】如何使用 Dropzone.js 进行分块文件上传(仅限 PHP)?【英文标题】:How do you use Dropzone.js with chunked file uploads (PHP only)? 【发布时间】:2018-10-28 01:13:45 【问题描述】:

我可以找到大量关于如何将分块文件上传与各种 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,如果为真,将始终以块的形式发送文件,即使它 只有一块

chunkSize 以字节为单位

parallelChunkUploads,如果为 true,则将上传块 同时

retryChunks,如果为真,库将重试上传一个块,如果它 失败

retryChunksLimit 默认为 3

然后有两个重要的回调。第一个是:params which 可以是一个函数,它首先接收文件、xhr 和块 争论。如果启用了分块,您知道文件只包含 那个文件,而块是保存所有信息的对象 关于当前块。示例:

var chunk = 
  file: file,
  index: 0,
  status: Dropzone.UPLOADING,
  progress: 0.4

请参阅该参数的文档以获取更多信息或查看 默认实现的源代码。

第二个重要的回调是chunksUploaded,它获取文件 完成上传并完成函数作为第二个参数。做 无论您需要在该功能中做什么,告诉服务器 文件上传完成,准备好后调用 done() 函数。

【问题讨论】:

【参考方案1】:

我发现我有很多问题。一是我没有使用最新版本的 Dropzone.js。

另一个是我没有检查 $_FILE 和 $_POST 的变量和文件部分。

一旦我解决了这些问题,我将 JavaScript 更改为:

    var myDropzone = new Dropzone("div#formDiv", 
    
        url: "uploadform.php",
        method: "post",
        timeout: 180000,
        maxFileSize: 1024,
        parallelUploads: 1,
        chunking: true,
        forceChunking: true,
        chunkSize: 256000,
        parallelChunkUploads: true,
        retryChunks: true,
        retryChunksLimit: 3,
    ;

通过删除 params 函数,我得到了默认值。这些值包括块索引和最大块数。

从那里我可以使用以下方法获取 PHP 脚本中的分块文件:

$_FILE['file']['name']
$_FILE['file']['tmp_name']
$_POST['dzchunkindex']
$_POST['dztotalchunkcount']

之后,只需在 PHP 脚本中检查所有上传的文件部分,然后重新组装它们,这在互联网上很容易找到的许多教程中都有处理。

【讨论】:

你能发布你的确切解决方案吗?我正面临 Dropzone 和 NodeJS 的确切问题。 ***.com/questions/50918759/… 大家好,我在使用 java servlet 作为后端时遇到了同样的问题。有人知道如何在java中实现上传代码吗? 您可以发布用于重新组装文件部分的 php 源代码吗? 这里是用于重新组装的 php ***.com/questions/56156402/…

如何从 dropzone.js 上传和删除文件

】如何从dropzone.js上传和删除文件【英文标题】:howtouploadanddeletefilesfromdropzone.js【发布时间】:2013-10-2221:54:52【问题描述】:我使用了下面的代码,图像已被删除,但缩略图仍然显示。Dropzone.options.myDropzone=init:function()this.on("succe... 查看详情

如何使用 dropzone.js 和 hapi.js 上传图片

】如何使用dropzone.js和hapi.js上传图片【英文标题】:Howtouploadanimageusingdropzone.jsandhapi.js【发布时间】:2018-06-0307:15:15【问题描述】:按照tutorial,我正在尝试将图像文件上传到我的hapi.js服务器。我遇到了这个错误:CORS错误:不允... 查看详情

Dropzone.js 上传进度条不显示

】Dropzone.js上传进度条不显示【英文标题】:Dropzone.jsuploadprogressbarnotshowing【发布时间】:2014-05-2003:02:57【问题描述】:我正在使用Dropzone.js进行文件上传,它运行良好,只是没有出现进度条。没有错误。我在网站的前端使用Bootst... 查看详情

如何克服 Laravel dropzone 文件上传中的 getClientOriginalName() 错误?

】如何克服Laraveldropzone文件上传中的getClientOriginalName()错误?【英文标题】:HowtoovercomegetClientOriginalName()errorinLaraveldropzonefileupload?【发布时间】:2017-05-1415:20:10【问题描述】:我使用的是Laravel5.0,图片上传我使用的是dropzone.js。... 查看详情

在每个文件上传时使用 dropzone.js 发送自定义数据

】在每个文件上传时使用dropzone.js发送自定义数据【英文标题】:Sendcustomdatawithdropzone.jsoneachFileUpload【发布时间】:2015-05-1809:26:26【问题描述】:我在我的CodeIgniter项目中使用dropzone。每次拖动文件时,dropzone都会创建一个ajax请求... 查看详情

仅当单击提交按钮时,如何让 Dropzone.js 上传文件?

】仅当单击提交按钮时,如何让Dropzone.js上传文件?【英文标题】:HowtogetDropzone.jstouploadfilesonlywhenasubmitbuttonisclicked?【发布时间】:2013-11-2212:33:34【问题描述】:在过去的几天里,我一直在尝试在我的表单中实现Dropzone,但到目... 查看详情

dropzone.js实现文件拖拽上传

dropzone.js是一个开源的JavaScript库,提供AJAX异步文件上传功能,支持拖拽文件、支持最大文件大小、支持设置文件类型、支持预览上传结果,不依赖jQuery库。查看演示下载源码使用Dropzone我们可以建立一个正式的上传form表单,并... 查看详情

上传 30 秒后,使用 PHP 上传 Dropzone.js 失败

】上传30秒后,使用PHP上传Dropzone.js失败【英文标题】:Dropzone.jsuploadwithPHPfailedafter30secondsupload【发布时间】:2018-03-0422:19:45【问题描述】:我正在尝试将“大”文件上传到我的应用程序。用户必须能够上传小于200MB的视频文件,... 查看详情

如何使用 dropzone 上传 base64 图像资源?

】如何使用dropzone上传base64图像资源?【英文标题】:Howtouploadbase64imageresourcewithdropzone?【发布时间】:2014-04-0112:13:55【问题描述】:我正在尝试使用Dropzone.js上传生成的客户端文档(暂时的图像)。//.../init.jsvarmyDropzone=newDropzone("... 查看详情

如何限制 dropzone.js 中的最大“总”文件大小?

】如何限制dropzone.js中的最大“总”文件大小?【英文标题】:Howtolimitthemax"total"filesizeindropzone.js?【发布时间】:2015-09-1616:09:43【问题描述】:目前我使用dropzone来处理Jquery中的文件上传。到目前为止,它工作正常。唯一... 查看详情

DropZone.js 上传无法以编程方式进行

】DropZone.js上传无法以编程方式进行【英文标题】:DropZone.jsuploadingisnotworkingonprogrammatically【发布时间】:2018-12-2006:02:43【问题描述】:我正在以编程方式处理dropzonejs。这是我的div,<divclass="dropzone"id="my-dropzone"><divclass="dz-m... 查看详情

如何从单独的函数调用 dropzone processQueue()?

】如何从单独的函数调用dropzoneprocessQueue()?【英文标题】:HowtocalldropzoneprocessQueue()fromseparatefunction?【发布时间】:2019-10-0517:06:09【问题描述】:我的表单包含dropzone.js,并通过jQuery插件formvalidation.io进行了验证。文件上传和验证... 查看详情

dropzone.js 图片上传接受的MimeTypes

】dropzone.js图片上传接受的MimeTypes【英文标题】:dropzone.jsimageuploadacceptedMimeTypes【发布时间】:2013-06-0509:51:28【问题描述】:我正在使用dropzone.js插件将图像上传器添加到我的应用程序。我知道这可能是一个非常基本的问题,所... 查看详情

在dropzone js上传目录中使每个挂载一个新文件夹

】在dropzonejs上传目录中使每个挂载一个新文件夹【英文标题】:makeeverymountanewfolderindropzonejsuploaddirectory【发布时间】:2019-04-0114:08:30【问题描述】:我在我的项目中使用dropzone.js来上传文章图片。例如所有文章图片都会上传到这... 查看详情

dropzone拖动文件上传在thinkphp5中应用一个实例

参考:Dropzone的使用方法点击查看dropzone中文文档后台用的INSPINIA框架的模板,里面有,dropzone.jsdropzone是一个可以拖文件上传的js.拖进去,就上传了。我在页面上,写了一个保存已经上传的文件的image3,image4.这就需要改写一下dropzo... 查看详情

重命名上传的文件,以便将其删除 DropZone.js

】重命名上传的文件,以便将其删除DropZone.js【英文标题】:RenameuploadedfilesoitcanberemovedDropZone.js【发布时间】:2015-02-2510:17:23【问题描述】:我决定更新这个问题,因为我仍然无法更改imageId这是我当前的dropzone实现$("div#UploadImage"... 查看详情

使用 NodeJS 进行多部分文件上传

...述】:我在上传文件以使用NodeJS时遇到问题。我正在使用Dropzone.JS创建一个向/file-upload发送POST请求的表单:<formaction="/file-upload"class="dropzonedragndrop"id="my-aweso 查看详情

如何仅使 Dropzone.js 预览 Div 可点击而不是整个表单

】如何仅使Dropzone.js预览Div可点击而不是整个表单【英文标题】:HowtomakeonlytheDropzone.jsPreviewsDivclickableandnotthewholeform【发布时间】:2014-04-0613:13:12【问题描述】:我必须使用dropzone.js表单,它将一些输入和文件上传信息发送到另一... 查看详情