PHP 无法获取通过 Dropzone 上传的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 无法获取通过 Dropzone 上传的文件?相关的知识,希望对你有一定的参考价值。

页面html<form action="/cdy/index.php?m=admin&i=dat_a_add" class="dropzone" method="post" enctype="multipart/form-data" name="add" id="my-awesome-dropzone"> <input name="text" type="text" multiple="" /><div class="fallback"><input name="pic[]" type="file" multiple="multiple" /></div><input type="submit" name="send" value="上传提交" class="tj_sub" /></form>上传后点提交无法获取上传文档的内容,打印$_POST 没有 pic 的内容,只有text的值。有大神指点下,谢了。

php中文件使用$_FILES来接收,所以你可以打印一下这个变量,这个变量里面应该有你想要看的上传文件值,所以php文件接收有文件接收的变量,因为它是文件类型,所以需要不一样的接收方式。追问

$_FILES 也接收不到。

如上面的代码,aaa可以取到值,但pic 无法取到值。我把pic[]改成pic也是一样的。

追答

看不到你发的代码

追问

追答

aaa都能获取到,换成pic没有区别啊

追问

区别就是一个在 的DIV里,一个在外,在外面的就可以,在里面的就不行,我查了下好像有人说值在XHR里,不懂ajax,不知道怎么取。

参考技术A 在PHP里,请求中上传的文件是不在$_POST中的
在$_FILES里追问

$_FILES 也接收不到。
我在这个DIV外面自己写的Input就可以拿到值。

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

【中文标题】DropZone.js 上传无法以编程方式进行【英文标题】:DropZone.js uploading is not working on programmatically 【发布时间】:2018-12-20 06:02:43 【问题描述】:

我正在以编程方式处理 dropzone js。这是我的 div,

<div class="dropzone" id="my-dropzone"> 
    <div class="dz-message">
        <div class="col-xs-8">
            <div class="message">
                <p>Drop files here or Click to Upload</p>
            </div>
        </div>
    </div>
    <div class="fallback">
        <input type="file" name="file" multiple>
    </div>
</div>

而 rpzone 类是 // Dropzone类:

var myDropzone = new Dropzone("div#my-dropzone",  url: "/file/post");

但是当我将图像拖放到 dropzone 框时,图像是带有十字符号的预览(不成功上传)。那么我该如何解决这个问题呢? dropzone.confif.js

var total_photos_counter = 0;
Dropzone.options.myDropzone = 
    uploadMultiple: true,
    parallelUploads: 2,
    maxFilesize: 5,
    previewTemplate: document.querySelector('#preview').innerHTML,
    addRemoveLinks: true,
    dictRemoveFile: 'Remove file',
    dictFileTooBig: 'Image is larger than 16MB',
    timeout: 10000,

    init: function () 
        this.on("removedfile", function (file) 
            $.post(
                url: '/images-delete',
                data: id: file.name, _token: $('[name="_token"]').val(),
                dataType: 'json',
                success: function (data) 
                    total_photos_counter--;
                    $("#counter").text("# " + total_photos_counter);
                
            );
        );
    ,
    success: function (file, done) 
        total_photos_counter++;
        $("#counter").text("# " + total_photos_counter);
    
;

【问题讨论】:

没有办法解决这个问题? 控制台有错误吗? 控制台没有任何错误 带有以下表单标签
csrf_field()
工作正常,但使用 div 则无法正常工作....
澄清一下,你用的是第一个sn-p new Dropzone()吗?第二个 sn-p Dropzone.options.myDropzone =?还是两者兼而有之? 【参考方案1】:

花了很长时间才找到解决方案。问题是 csrf_field() 没有在我的 div 标签中配置, 首先将此添加到您的主刀片模板中:

<meta name="csrf-token" content=" csrf_token() ">

然后配置dropzone.config.js文件到csrf

Dropzone.options.myDropzone = 
    uploadMultiple: true,
    parallelUploads: 2,
    maxFilesize: 16,
    previewTemplate: document.querySelector('#preview').innerHTML,
    addRemoveLinks: true,
    dictRemoveFile: 'Remove file',
    dictFileTooBig: 'Image is larger than 16MB',
    timeout: 10000,

    init: function () 
        this.on("removedfile", function (file) 
            $.post(
                url: '/images-delete',
                data: id: file.name, _token: $('[name="_token"]').val(),
                dataType: 'json',
                success: function (data) 
                    total_photos_counter--;
                    $("#counter").text("# " + total_photos_counter);
                
            );
        );
    ,
    success: function (file, done) 
        total_photos_counter++;
        $("#counter").text("# " + total_photos_counter);
    ,

    sending: function(file, xhr, formData)
        formData.append('_token', $('meta[name="csrf-token"]').attr('content'));
    
;

现在使用正确的网址可以正常工作

【讨论】:

以上是关于PHP 无法获取通过 Dropzone 上传的文件?的主要内容,如果未能解决你的问题,请参考以下文章

php Dropzone.js与php多个文件上传

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

在 React Dropzone 中获取本地文件路径

使用 Dropzone 和 Laravel 获取要上传的图像

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

Dropzone多个文件上传不适用于Excel文件