Laravel& Dropzone文件删除不起作用

时间:2016-06-12 19:44:55

标签: php jquery ajax laravel dropzone.js

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

我在控制器中的上传方法

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);

    }

1 个答案:

答案 0 :(得分:1)

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

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

  2. 请求input方法为小写。

  3. 我相信这更接近您的需求:

    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