【问题标题】:Laravel & Dropzone file delete not workingLaravel 和 Dropzone 文件删除不起作用
【发布时间】:2016-10-13 04:51:13
【问题描述】:

我想从服务器上删除通过 Dropzone 上传的文件。但是,只有缩略图已被删除。服务器中的文件没有被删除。我在控制台中遇到错误。http://localhost:8000/upload/delete 500 (Internal Server Error)'

我在控制器中的上传方法

public function upload(Request $request){
           $file= $request->file('file');
           $filename=$file->getClientOriginalName();
           $upload='uploads/topics';
           $file->move($upload, $filename);
    }

Dropzone 脚本文件。

Dropzone.options.addImages = {
maxFilesize: 8,
addRemoveLinks: true,
dictRemoveFile: 'Remove',

init:function() {

        this.on("removedfile", function(file) {

            $.ajax({
                type: 'POST',
                url: 'upload/delete',
                data: {id: file.name},
                dataType: 'html',
                 success: function(data){
                    var rep = JSON.parse(data);

                 }
            });

        } );
    },
}

我在控制器中的删除方法。

public function delete(Request $request){
         $filename = $request->input('id');
          unlink('uploads/topics'.$filename);

    }

【问题讨论】:

    标签: php jquery ajax laravel dropzone.js


    【解决方案1】:

    我可以立即看到的两个问题:

    1. 在您的 delete 控制器方法中,您尝试访问 $request 但您尚未注入它。

    2. 请求input方法是小写的。

    我相信这更接近您的需要:

    public function delete(Request $request){    
        $filename = $request->input('id');
        unlink('uploads/topics/' . $filename);
    }
    

    一些注意事项:

    1. 每当您收到“内部服务器错误”时,这意味着您需要检查错误日志。您的一个日志文件中有详细信息可以告诉您确切的错误。

    2. 现在,您的删除方法可能允许用户删除您可能不希望他们删除的内容。我可以轻松地将文件名发布到该端点并从您的 topics 文件夹中删除任何内容。

    3. 更危险的是,这段代码似乎面临着遍历攻击的风险。详情见这里:https://www.owasp.org/index.php/Path_Traversal

    【讨论】:

    • 我已经按照你说的更新了 cod。但这不起作用,我该如何检查日志文件?
    • 您需要更具体,而不仅仅是“不工作”。您的错误日志取决于您使用的网络服务器。也许这会帮助您入门:stackoverflow.com/a/5127884/660694
    • 您还应该在delete 方法中进行一些基本的故障排除。执行dd($request->all()) 以确保您获得了 id 参数。在取消链接之前执行dd('uploads/topics/' . $filename);,以确保路径看起来不错。这只是在这里调试 101 个东西。
    • 同时查看app/Http/routes.php 文件。您的删除路线真的是/upload/delete 还是可能只是/delete
    • 我按照你说的做了一个 dd($request->all())。我也做了一个 dd('uploads/topics/' . $filename);但是什么也没发生。我得到了同样的错误。我正在使用 wamp 服务器。
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多