Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除服务器上的文件?FilePond.revert不会将参数传递给laravel控制器_Javascript_Php_Laravel_Filepond - Fatal编程技术网

Javascript 如何删除服务器上的文件?FilePond.revert不会将参数传递给laravel控制器

Javascript 如何删除服务器上的文件?FilePond.revert不会将参数传递给laravel控制器,javascript,php,laravel,filepond,Javascript,Php,Laravel,Filepond,FilePond.revert不会将唯一id文件传输到laravel控制器 如何按ID删除已下载的文件 FilePond JS var csrf = $('meta[name="csrf-token"]').attr('content'); FilePond.setOptions({ server: { url: '/file/upload/', process: { url: 'proc

FilePond.revert不会将唯一id文件传输到laravel控制器

如何按ID删除已下载的文件

FilePond JS

var csrf = $('meta[name="csrf-token"]').attr('content'); 

    FilePond.setOptions({
        server: {
            url: '/file/upload/',
            process: {
                url: 'process',
                headers: {
                    'X-CSRF-TOKEN': csrf
                },
                onload: function (responce) {
                    console.log(JSON.parse(responce))
                },
            },
            revert: {
                url: 'revert',
                headers: {
                    'X-CSRF-TOKEN': csrf
                },
                onload: function (x) {

                    // X - empty, why????
                    console.log(x)

                },
            },
            load: {
                url: 'load/',
            },
        },
    })

    FilePond.create(document.querySelector('.filepond[type="file"]'), {
        files: [
            {
                source: '11',
                options: {
                    type: 'local',
                }
            },
        ]
    });
加载图片成功。 返回唯一的ID文件作为响应

public function process(){

        $file = FilesUploadService::save();

        return response($file->collection->id, 200)
            ->header('Content-Type', 'text/plain');
    }
此处为空,我找不到需要删除的文件id

public function revert(Request $request){
        return response()->json($request->all());
    }

下面的
onload
方法应向FilePond返回唯一的id。因此,例如,如果在
response.id
中找到唯一id,则添加返回行,如图所示

onload: function (responce) {
    console.log(JSON.parse(responce))
    return JSON.parse(responce).id // added
},

你让它起作用了吗?FilePond在还原时使用
DELETE
标题,这可能就是您无法从请求中获得任何内容的原因

也许是这样的

public function revert(){
$response=新stdClass();
如果($\u服务器['REQUEST\u METHOD']='DELETE'){
$file\u name=strip\u标记(文件获取内容(“php://input"));
if(is_string($file_name)&&FilesUploadService::delete($file_name)){
$response->id=$file\u name;
$response->success=true;
}否则{
$response=false;
}
}否则{
$response=false;
}
return response()->json($response);
}

任何仍在挣扎的人:

request->getContent()将返回filepond发送的请求负载

在控制器中的还原方法中:

public function revert(Request $request){
     $fileId = request()->getContent();
     //use $fileId to delete file from filesystem
}

几个小时以来,我一直在努力使用
FilePond
还原/删除一个早期上传的文件,但在清理了这些文件后,我想出了一个快速的解决方法

在JavaScript方面,您可以通过
XHR
对象执行以下操作来上传文件:

<script>
        const pondElement = document.querySelector('input[type="file"]');
        const pond = FilePond.create( pondElement );

        FilePond.setOptions({
            server: {
                url: "{!! route('ajax.uploadFiles') !!}",
                process: {
                    headers: {
                        'X-CSRF-TOKEN': '{!! csrf_token() !!}'
                    }
                },
            }
        });
</script>

PS:此代码仅用于演示目的,请保护您的表单并提供更好的用户体验。

Filepond脚本位于Laravel blade文件中

<!-- filepond script -->
<script>
    const inputElement = document.querySelector('input[id="file"]');
    const pond = FilePond.create( inputElement );
    FilePond.setOptions({
        server: {
            headers: {
                'X-CSRF-TOKEN': '{{ csrf_token() }}'
            },
            process: {
                url: '{{ route('store') }}',
            },
            revert: {
                url: '{{ route('destroy') }}',
            }
        }
    });
</script>

这就是我在我的一个项目上所做的,但是“删除”请求始终是空的。。。。
public function uploadFiles(Request $request)
{
    if ($request->has('attachments')) {
        if (!file_exists(storage_path('app/tmp'))) {
            mkdir(storage_path('app/tmp', 0777, true));
        }

        $file = $request->file('attachments')[0];
        $file_name = $file->getClientOriginalName();

        $file_path = storage_path("app/tmp/{$file_name}");

        $file->storeAs(null, $file_name, 'tmp');
    }
}

public function revertFiles(Request $request)
{
    unlink(storage_path("app/tmp/{$request->filename}"));
}
<!-- filepond script -->
<script>
    const inputElement = document.querySelector('input[id="file"]');
    const pond = FilePond.create( inputElement );
    FilePond.setOptions({
        server: {
            headers: {
                'X-CSRF-TOKEN': '{{ csrf_token() }}'
            },
            process: {
                url: '{{ route('store') }}',
            },
            revert: {
                url: '{{ route('destroy') }}',
            }
        }
    });
</script>
public function destroy(Request $request)
{
    $folder = json_decode($request->getContent()); // folder name
}