лучший способ управления загруженными файлами в моем редакторе?
Я работаю над социальным блогом, в котором есть редактор, созданный в javascript для создания блога пользователем. одна из моих самых больших проблем - загрузка файлов и их ограничение. прямо сейчас для автосохранения сообщений пользователей, я хранил изображения, загруженные одновременно на сервер, но проблема в том, что пользователь удалил изображения из редактора, потому что:
- Количество запросов может быть слишком большим (даже если есть бот)
- В Ckeditor у меня есть процедура для загрузки, но не для ее удаления с сервера (или, по крайней мере, я не знаю, как)
- и, наконец, это хорошая идея для автосохранения (?)
Мой редактор - это настроенная версия ckeditor5, и для загрузки файлов я использую uploadadapter, например:
export default class UploadAdapter {
constructor(loader, article) {
this.loader = loader;
this.article = article;
}
upload() {
return new Promise((resolve, reject) => {
let image = new FormData();
let url = '/articles/imageUpload';
image.append('upload', this.loader.file);
image.append('token', this.article.token);
axios.post(url, image)
.then(response => {
console.log(response);
if (response.data.uploaded) {
resolve({
default: response.data.url,
});
}
else {
reject(response.data.error.message);
}
}).catch(error => {
console.log(error);
});
});
}
}
Ответы
Ответ 1
Не знаю, что это поможет вам или нет. Но я использовал эту проблему для удаления изображения, как это.
Я использовал редактор summernote.
Шаги я последовал, когда я вставлял изображения с другим содержимым:
Собрано все изображения из редактора
$images = $dom->getelementsbytagname('img');
Здесь я получаю изображения как base64. вот почему мне нужно было их расшифровать и хранить отдельно
$imagePaths = [];
foreach($images as $k => $img){
$data = $img->getattribute('src');
$check_image = substr($data,0,10);
if($check_image != "data:image"){
continue;
}
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
$image_name = time().$k.'.png';
$path = public_path("/").ImagePaths::$BLOG_DETAILS_PICTURE.'/'.$image_name;
file_put_contents($path, $data);
$img->removeattribute('src');
$img->setattribute('src', asset(ImagePaths::$BLOG_DETAILS_PICTURE.'/'.$image_name));
$imagePaths[] = $path; // This path for store in DB
}
Когда я удаляю или обновляю контент, я просто удаляю все изображения, которые я получил в массиве $imagePaths
ранее и сохранял.
Когда я работал над этим, я следил за этой документацией
Здесь я поделился полным скриптом контроллера.
Ответ 2
Я использовал ниже для встраивания изображений в качестве base64 вместо загрузки их
class UploadAdapter {
constructor( loader ) {
this.loader = loader;
}
upload() {
return this.loader.file
.then( file => new Promise( ( resolve, reject ) => {
var myReader= new FileReader();
myReader.onloadend = (e) => {
resolve({ default: myReader.result });
}
myReader.readAsDataURL(file);
} ) );
};
}
Ответ 3
Я рекомендую вам использовать файловый менеджер UniSharp laravel, это очень полезный пакет для загрузки файлов и изображений, он отлично работает с CKeditor, TinyMCE и другими редакторами.