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());
}
答案 0 :(得分:0)
下面的onload
方法应向FilePond返回唯一的ID。因此,例如,如果在responce.id
中找到了唯一ID,则可以添加如下所示的返回行。
onload: function (responce) {
console.log(JSON.parse(responce))
return JSON.parse(responce).id // added
},
答案 1 :(得分:0)
您得到了这个工作吗? FilePond在还原时使用DELETE
标头,这可能就是为什么您没有从请求中得到任何东西的原因。
也许是这样吗?
public function revert(){
$response = new stdClass();
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
$file_name = strip_tags(file_get_contents("php://input"));
if (is_string($file_name) && FilesUploadService::delete($file_name)) {
$response->id = $file_name;
$response->success = true;
} else {
$response = false;
}
} else {
$response = false;
}
return response()->json($response);
}
答案 2 :(得分:0)
任何人仍在挣扎:
request-> getContent()将返回filepond发送的请求有效负载。
在控制器的还原方法中:
public function revert(Request $request){
$fileId = request()->getContent();
//use $fileId to delete file from filesystem
}
答案 3 :(得分:0)
我一直在努力使用FilePond
还原/删除早期上传的文件,但经过数小时的努力,但在the docs上进行清理之后,我发现可以快速解决此问题。< / p>
在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>
现在棘手的部分:还原/删除:
<script>
const filepond_root = document.querySelector('.filepond--root');
filepond_root.addEventListener('FilePond:processfilerevert', e => {
$.ajax({
url: "{!! route('ajax.revertFiles') !!}",
type: 'POST',
data: {'_token': '{!! csrf_token() !!}', 'filename': e.detail.file.filename}
})
});
</script>
在您的ServerSide(Laravel)上,它很容易且直接,如下所示:
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}"));
}
PS:此代码仅用于演示目的,请保护您的表单并提供更好的用户体验。
答案 4 :(得分:0)
Laravel 刀片文件中的 Filepond 脚本
<!-- 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>
在 Laravel 控制器文件中销毁方法
public function destroy(Request $request)
{
$folder = json_decode($request->getContent()); // folder name
}