如何解决Laravel 7 Vue Dropzone-无法显示存储中的图像文件名未上传到phpmyadmin
我已通过Dropzone js将提供的图像成功加载到images文件夹内公共文件夹中的存储中。我不清楚如何将引用上传到phpmyadmin SQL数据库。如果将其硬编码到数据库中,则可以在页面上看到它。但是,使用我正在使用的表单,我正在调用更新任务表单中的组件。我不确定这是否无法正常工作,但是无论如何,我都会发布代码,以希望有人能将我的方向正确。预先谢谢你。
ImageController.php
public function store(Request $request)
{
$imageName = time() . '.' . $request->file->getClientOriginalExtension();
$request->file->move(public_path('images'),$imageName);
return response()->json(['success' => 'You have successfully uploaded the file(s).']);
}
web.php
Route::post('store-multiple-image','ImageController@store');
app.js
Vue.component(
"multiple-image-component",require("./components/MultipleImageUploadComponent.vue").default
);
TaskController.php(仅出于简洁目的存储方法)
public function store(Request $request)
{
// $this->validate($request,[
// 'name' => 'required|string|max:191',// 'email' => 'required|string|email|max:191|unique:users',// 'password' => 'required|string|min:6'
// ]);
return Task::create([
'task_name' => $request['task_name'],'task_priority' => $request['task_priority'],'task_assigned_to' => $request['task_assigned_to'],'task_assigned_by' => $request['task_assigned_by'],'task_description' => $request['task_description'],'task_to_be_completed_date' => $request['task_to_be_completed_date'],'task_status' => $request['task_status'],'task_notes' => $request['task_notes'],'task_finished' => $request['task_finished'],'image' => $request['image'],]);
}
Tasks.vue(为了防止在某处引起冲突,我已经在此处包括了所有内容)
<template>
<div class="custom-container">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card w-100">
<div class="card-header text-white" style="background-color: #605ca8;">
<h3 class="card-title">Tasks</h3>
<div class="card-tools">
<button class="btn btn-success" @click="newModal">
<i class="fas fa-tasks"></i> Add New Task
</button>
</div>
</div>
<!-- /.card-header -->
</div>
</div>
</div>
<div v-for="task in tasks" :key="task.id">
<div class="my-3 p-3 bg-white rounded box-shadow">
<div class="row">
<div class="col-md-4">
<h5>Task</h5>
<hr />
<p>{{ task.task_name }}</p>
</div>
<div class="col-md-4">
<h5>Priority</h5>
<hr />
<p>{{ task.task_priority }}</p>
</div>
<div class="col-md-4">
<h5>Assigned To</h5>
<hr />
<p>{{ task.task_assigned_to }}</p>
</div>
<div class="col-md-4">
<h5>Assigned By</h5>
<hr />
<p>{{ task.task_assigned_by }}</p>
</div>
<div class="col-md-4">
<h5>Date Assigned</h5>
<hr />
<p>{{ task.created_at }}</p>
</div>
<div class="col-md-4">
<h5>Due</h5>
<hr />
<p>{{ task.task_to_be_completed_date }}</p>
</div>
<div class="col-md-4">
<h5>Task Description</h5>
<hr />
<p>{{ task.task_description }}</p>
</div>
<div class="col-md-4">
<h5>Finished</h5>
<hr />
<p>{{ task.task_finished }}</p>
</div>
<div class="col-md-4">
<h5>Status</h5>
<hr />
<p>{{ task.task_status }}</p>
</div>
<div class="col-md-4">
<h5>Images</h5>
<hr />
<img style="max-width: 150px;" :src="'/images/' + task.image" alt />
<br />
<img style="max-width: 150px;" src="/img/molding.jpg" alt />
</div>
<div class="col-md-4">
<h5>Notes</h5>
<hr />
<p>{{ task.task_notes }}</p>
</div>
<div class="col-md-4">
<h5>Action</h5>
<hr />
<a href="#" class="badge badge-primary p-2 mb-3" @click="editModal(task)">
<i class="fa fa-edit"></i> Edit
</a>
<a @click="deleteTask(task.id)" href="#" class="badge badge-danger p-2">
<i class="fa fa-trash"></i> Delete
</a>
</div>
</div>
</div>
</div>
<form @submit.prevent="editmode ? updateTask() : createTask()">
<!-- Modal -->
<div
class="modal fade"
id="addNew"
tabindex="-1"
aria-labelledby="addNewLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" v-show="!editmode" id="addNewLabel">Add New Task</h5>
<h5 class="modal-title" v-show="editmode" id="addNewLabel">Update Task Information</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<input
id="task_name"
type="text"
v-model="form.task_name"
name="task_name"
class="form-control"
placeholder="Task Name"
:class="{
'is-invalid': form.errors.has(
'task_name'
)
}"
/>
<has-error :form="form" field="task_name"></has-error>
</div>
<div class="form-group">
<select
id="task_priority"
type="text"
v-model="form.task_priority"
name="task_priority"
class="form-control"
:class="{
'is-invalid': form.errors.has(
'task_priority'
)
}"
>
<option value>Select a Priority Level</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<has-error :form="form" field="task_priority"></has-error>
</div>
<div class="form-group">
<textarea
id="task_description"
type="text"
v-model="form.task_description"
name="task_description"
class="form-control"
placeholder="Task Description"
:class="{
'is-invalid': form.errors.has(
'task_description'
)
}"
></textarea>
<has-error :form="form" field="task_description"></has-error>
</div>
<div class="form-group">
<input
id="task_assigned_by"
type="text"
v-model="form.task_assigned_by"
name="task_assigned_by"
class="form-control"
placeholder="Assigned By"
:class="{
'is-invalid': form.errors.has(
'task_assigned_by'
)
}"
/>
<has-error :form="form" field="task_assigned_by"></has-error>
</div>
<div class="form-group">
<input
id="task_assigned_to"
type="text"
v-model="form.task_assigned_to"
name="task_assigned_to"
class="form-control"
placeholder="Assigned To"
:class="{
'is-invalid': form.errors.has(
'task_assigned_to'
)
}"
value="form.user.id"
/>
<has-error :form="form" field="task_assigned_to"></has-error>
</div>
<div class="form-group">
<label for="task_to_be_completed_date">Due:</label>
<input
id="task_to_be_completed_date"
type="date"
v-model="form.task_to_be_completed_date"
name="task_to_be_completed_date"
class="form-control"
placeholder="Due: "
:class="{
'is-invalid': form.errors.has(
'task_to_be_completed_date'
)
}"
/>
<has-error :form="form" field="task_to_be_completed_date"></has-error>
</div>
<div class="form-group">
<select
id="task_status"
type="text"
v-model="form.task_status"
name="task_status"
class="form-control"
:class="{
'is-invalid': form.errors.has(
'task_status'
)
}"
>
<option value>Select Task Status</option>
<option value="Pending">Pending</option>
<option value="Finished">Finished</option>
<option value="Incomplete">Incomplete</option>
</select>
<has-error :form="form" field="task_status"></has-error>
</div>
<div class="form-group">
<select
id="task_finished"
type="text"
v-model="form.task_finished"
name="task_finished"
class="form-control"
:class="{
'is-invalid': form.errors.has(
'task_finished'
)
}"
>
<option value>Select finished status</option>
<option value="Finished">Finished</option>
<option value="Unfinished">Unfinished</option>
</select>
<has-error :form="form" field="task_status"></has-error>
</div>
<div class="form-group">
<label for="task_notes">Notes:</label>
<textarea
id="task_notes"
type="text"
v-model="form.task_notes"
name="task_notes"
class="form-control"
placeholder="Notes: "
:class="{
'is-invalid': form.errors.has(
'task_notes'
)
}"
></textarea>
<has-error :form="form" field="task_notes"></has-error>
</div>
<multiple-image-component></multiple-image-component>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
<button v-show="editmode" type="submit" class="btn btn-success">Update</button>
<button v-show="!editmode" type="submit" class="btn btn-primary">Create New Task</button>
</div>
</div>
</div>
</div>
</form>
</div>
</template>
<script>
export default {
data() {
return {
editmode: true,tasks: {},attachments: [],// formImage: new FormData(),form: new Form({
id: "",task_name: "",task_description: "",task_assigned_by: "",task_assigned_to: "",task_to_be_completed_date: "",task_priority: "",task_notes: "",task_status: "",task_finished: "",task_image: "",}),};
},methods: {
updateTask() {
this.$Progress.start();
this.form
.put("api/task/" + this.form.id)
.then(() => {
// successfull
$("#addNew").modal("hide");
Swal.fire("Updated","Task information updated.","success");
this.$Progress.finish();
Fire_event.$emit("AfterCreate");
})
.catch(() => {
// Unsuccessfull
this.$Progress.fail();
});
},editModal(task) {
this.editmode = true;
this.form.reset();
$("#addNew").modal("show");
this.form.fill(task);
},newModal() {
this.editmode = false;
this.form.reset();
$("#addNew").modal("show");
},deleteTask(id) {
Swal.fire({
title: "Are you sure?",text: "You won't be able to revert this!",icon: "warning",showCancelButton: true,confirmButtonColor: "#3085d6",cancelButtonColor: "#d33",confirmButtonText: "Yes,delete it!",}).then((result) => {
// Send request to the server
if (result.value) {
this.form
.delete("api/task/" + id)
.then(() => {
Swal.fire("Deleted!","Task has been deleted.","success");
Fire_event.$emit("AfterCreate");
})
.catch(() => {
Swal.fire("Failed","Something went wrong.","warning");
});
}
});
},loadTasks() {
axios.get("api/task").then(({ data }) => (this.tasks = data.data));
},createTask() {
this.$Progress.start();
this.form
.post("api/task")
.then(() => {
Fire_event.$emit("AfterCreate");
$("#addNew").modal("hide");
toast.fire({
icon: "success",title: "Task Created successfully",});
this.$Progress.finish();
this.target.reset();
})
.catch(() => {
this.$Progress.fail();
// toast.fire({
// icon: "error",// title: "The Task was not created.",// });
});
},},created() {
this.loadTasks();
// setInterval(() => this.loadUsers(),3000);
Fire_event.$on("AfterCreate",() => {
this.loadTasks();
});
},mounted() {
console.log("Component mounted.");
},};
</script>
Task.php(模型)
protected $fillable = [
'task_name','task_priority','task_assigned_to','task_assigned_by','task_description','task_to_be_completed_date','task_status','task_notes','task_finished','image'
];
最后是Dropzone的MultipleImageUploadComponent.vue
<template>
<div class="container">
<div class="row justify-content-start">
<div class="">
<div class="card">
<div class="card-header">Task Image</div>
<div class="card-body">
<vue-dropzone
ref="myVueDropzone"
id="dropzone"
:options="dropzoneOptions"
></vue-dropzone>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import vue2Dropzone from "vue2-dropzone";
import "vue2-dropzone/dist/vue2Dropzone.min.css";
export default {
components: {
vueDropzone: vue2Dropzone
},data: function() {
return {
dropzoneOptions: {
url: "/store-multiple-image",headers: {
"X-CSRF-TOKEN": document.head.querySelector(
"[name=csrf-token]"
).content
}
}
};
},mounted() {
console.log("Component mounted.");
}
};
</script>
将vue和laravel结合在一起是我的新手,所以如果您能帮帮我,我一定会感激的。
解决方法
现在,Dropzone使用Ajax请求,而我试图用来上载表单其余部分的方法也是如此。这会产生冲突,开箱即用,Dropzone将不允许使用此功能。
至少现在没有配置日志。就我而言,Dropzone不是一个可行的选择,我必须寻找其他选择才能在表单中上传多个图像。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。