I am having a problem uploading an image from a from a form in a vue file. I tried several ways to do this but it seems the file is not properly being set.
I have set "enctype="multipart/form-data" in my form tag
Here is my input element:
<input @change="onFileChange" type="file" accept="image/*" class="form-control" name="file" id="file" aria-describedby="helpId" placeholder="Upload a file" />
Here is my data objetcs and methods that send the data:
data() { return { editMode: false, professionaldevelopmentitems: [], professionaldevelopmentitem: { domain: 1, domaincategory: 1, title: "", dateofpd: "", location: "", lengthofpd: "", facilitatorname: "", facilitatorcredentials: "", reflection: "", file: "", }, }; }, methods: { onFileChange(e) { alert(e.target.files[0]); alert(e.target.files[0].name); var files = e.target.files || e.dataTransfer.files; if (!files.length) return; this.professionaldevelopmentitem.file = e.target.files[0]; alert(this.professionaldevelopmentitem.file); }, async addProfessionalDevelopmentItem() { document.getElementById("pdForm").reset(); this.editMode = false; const res = await axios.post( "/api/professionaldevelopmentitems", this.professionaldevelopmentitem ); if (res.status === 201) { Toast.fire({ icon: "success", title: res.data, }); document.getElementById("pdForm").reset(); $("#manageProfessionalDevelopmentItem").modal("hide"); Fire.$emit("modifiedPDItem"); } }, async editProfessionalDevelopmentItem(data) { this.professionaldevelopmentitem = Object.assign({}, data); this.editMode = true; }, async updateProfessionalDevelopmentItems(data) { const res = await axios.put( `/api/professionaldevelopmentitems/${data.id}`, this.professionaldevelopmentitem ); if (res.status === 200) { Toast.fire({ icon: "success", title: res.data, }); document.getElementById("pdForm").reset(); $("#manageProfessionalDevelopmentItem").modal("hide"); Fire.$emit("modifiedPDItem"); this.editMode = false; } },
I receive data in my controller and try to store the file:
public function update(Request $request, $id) {
dd($request->all());
$this->validate($request, [
'title' => ['required'],
'dateofpd' => ['required'],
'lengthofpd' => ['required'],
'location' => ['required']
]);
$path = $request->file('filename')->store('uploads');
$pditem = ProfessionalDevelopmentItem::find($id);
$pditem->domain = $request->domain;
$pditem->domaincategory = $request->domaincategory;
$pditem->title = $request->title;
$pditem->dateofpd = $request->dateofpd;
$pditem->lengthofpd = $request->lengthofpd;
$pditem->location = $request->location;
$pditem->facilitatorname = $request->facilitatorname;
$pditem->facilitatorcredentials = $request->facilitatorcredentials;
$pditem->certificategranted = $request->certificategranted;
$pditem->certificateexpires = $request->certificateexpires;
$pditem->certificateexpiration = $request->certificateexpiration;
$pditem->reflection = $request->reflection;
$pditem->nameofinstitution = $request->nameofinstitution;
$pditem->coursename = $request->coursename;
$pditem->coursecode = $request->coursecode;
$pditem->hoursofinstruction = $request->hoursofinstruction;
$pditem->creditgranted = $request->creditgranted;
$pditem->bookname = $request->bookname;
$pditem->bookauthor = $request->bookauthor;
$pditem->bookyear = $request->bookyear;
$pditem->bookpublisher = $request->bookpublisher;
$pditem->otherdescription = $request->otherdescription;
$pditem->filename = $path;
$pditem->save();
return response('Successfully Updated the Professional Development Item.', 200);
}
the response back is an error on the line when it tries to store the file:
"message": "Call to a member function store() on array",
"exception": "Error",
Any thoughts on what I am dong wrong would be appreciated.
$path = $request->file('filename')->store('uploads');$request->file('filename')usingdd($request->file('filename'));dd($request)or use$request->file('filename'), also checkdd($request->hasFile('filename'))returns true of falsedd($request->hasFile('file'))