Javascript 如何删除服务器上的文件?FilePond.revert不会将参数传递给laravel控制器
FilePond.revert不会将唯一id文件传输到laravel控制器 如何按ID删除已下载的文件 FilePond JSJavascript 如何删除服务器上的文件?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
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
}