Mar 4, 2022
0
Level 2
how to storing picture from trix-editor?
i tried, but didn't showing the picture:
<label for="description"><i class="fa-solid fa-pen-field"></i> Description</label>
<br>
<input id="description" type="hidden" name="description">
<trix-editor input="description"></trix-editor>
@error('description')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
<script>
var file = document.querySelector("input[type=file]").file
element.editor.insertFile(file)
</script>
- on topiccontroller
public function store(CreateTopicRequest $request)
{
if ($request->hasFile('file')) {
//get filename with extension
$filenamewithextension = $request->file('file')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('file')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename . '_' . time() . '.' . $extension;
//Upload File
$request->file('file')->storeAs('public/uploads', $filenametostore);
// you can save image path below in database
$path = asset('storage/uploads/' . $filenametostore);
echo $path;
exit;
}
$user = auth()->user();
$user->topics()->create([
'genre' => $request->genre,
'title' => $request->title,
'slug' => Str::slug($request->title),
'description' => $request->description,
]);
return redirect()->route('topic.index')->with('message', 'Discussion posted!');
}
- attachment.js
(function() {
var HOST = "{{route('topic.store')}}"
addEventListener("trix-attachment-add", function(event) {
if (event.attachment.file) {
uploadFileAttachment(event.attachment)
}
})
function uploadFileAttachment(attachment) {
uploadFile(attachment.file, setProgress, setAttributes)
function setProgress(progress) {
attachment.setUploadProgress(progress)
}
function setAttributes(attributes) {
attachment.setAttributes(attributes)
}
}
function uploadFile(file, progressCallback, successCallback) {
var key = createStorageKey(file)
var formData = createFormData(key, file)
var xhr = new XMLHttpRequest()
xhr.open("POST", HOST, true)
xhr.upload.addEventListener("progress", function(event) {
var progress = event.loaded / event.total * 100
progressCallback(progress)
})
xhr.addEventListener("load", function(event) {
if (xhr.status == 204) {
var attributes = {
url: HOST + key,
href: HOST + key + "?content-disposition=attachment"
}
successCallback(attributes)
}
})
xhr.send(formData)
}
function createStorageKey(file) {
var date = new Date()
var day = date.toISOString().slice(0,10)
var name = date.getTime() + "-" + file.name
return [ "tmp", day, name ].join("/")
}
function createFormData(key, file) {
var data = new FormData()
data.append("key", key)
data.append("Content-Type", file.type)
data.append("file", file)
return data
}
})();
Please or to participate in this conversation.