亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

如何在 Vue 表單中處理圖片

瀏覽:13日期:2022-10-08 16:07:22
問題:

我在 Vue 中有一個 form 表單,用于上傳博客帖子,它有標題、正文、描述、片段和圖片等范圍。所有的一切都是必需的。我在 Express 中設置了一個 API 來處理這個問題。我在 Postman 中測試正常,但是我不知道如何通過瀏覽器將文件發送給數據庫。我一直收到 500 錯誤,并且我將數據打印到控制臺,而圖片字段為空,所以我確信這就是問題所在,但我就是搞不清楚怎么辦。

這是我前端頁面的 form 表單:

<template> <div class='container'> <div id='nav'> <adminnav/> </div> <div id='create'> <h1>Create new post</h1> </div> <div id='post'> <body> <form> <label for='title'>Title: </label> <textarea v-model=formdata.title rows='5' cols='60' name='title' placeholder='Enter text'> </textarea> <br/> <label for='body'>Body: </label> <textarea v-model=formdata.body rows='5' cols='60' name='body' placeholder='Enter text'> </textarea> <br/> <label for='description'>Description: </label> <textarea v-model=formdata.description rows='5' cols='60' name='description' placeholder='Enter text'> </textarea> <br/> <label for='snippet'>Snippet: </label> <textarea v-model=formdata.snippet rows='5' cols='60' name='snippet' placeholder='Enter text'> </textarea> <br/> <label for='file'>Upload photo: </label> <input type='file' accept='image/*' v-bind='formdata.photo' /> <br/> <input type='submit' value='submit' @click.prevent='createPost()'/> </form> </body> </div> </div></template><script>import adminnav from ’../components/adminnav.vue’;import PostService from ’../service/PostService’;export default { name: ’createStory’, components: { adminnav, }, data() { return { formdata: { title: ’’, body: ’’, description: ’’, snippet: ’’, photo: null, }, }; }, methods: { createPost() { console.log(this.formdata); /* eslint prefer-destructuring: 0 */ const formdata = this.formdata; PostService.createPost(formdata) .then(() => { console.log(’success’); }); }, },};</script>

這是 POST 請求。

router.post('/add-story', upload.single(’photo’), async(req, res) => { try{ let post = new Post(); post.title = req.body.title; post.description = req.body.description; post.photo = req.file.location; post.body = req.body.body; post.snippet = req.body.snippet; await post.save(); res.json({ status: true, message: 'Successfully saved.' }); } catch(err) { res.status(500).json({ success: false, message: err.message }); }});解決方法

讓我們監視文件 <input> 中的 change 事件。這樣可以確保每次用戶的上傳行為觸發 updatePhoto 方法并把文件數據儲存到 this.photo。

<input type='file' accept='image/*' @change='updatePhoto($event.target.name, $event.target.files)'>

編碼去收集所有的數據并發送請求

// vue組件的其他部分data () { return { title: ’’, body: ’’, description: ’’, snippet: ’’, photo: {} // 儲存文件數據 };},methods: { updatePhoto (files) { if (!files.length) return; // 存儲文件數據 this.photo = { name: files[0].name, data: files[0] }; }, createPost() { let formData = new FormData(); formData.append(’title’, this.title); formData.append(’body’, this.body); formData.append(’description’, this.description); formData.append(’snippet’, this.snippet); formData.append(’photo’, this.photo.data, this.photo.name); PostService.createPost(formdata) .then(() => { console.log(’success’); }); }}// vue組件的其他部分

很明顯,我跳過了很多事情,比如整個 vue 組件結構,我相信它與這個問題無關,還有一些確保在啟動請求之前文件數據可用的檢查等等。這是一個關于如何獲取文件數據的想法,所以希望這個答案能啟發您。

以上就是如何在 Vue 表單中處理圖片的詳細內容,更多關于Vue 表單中處理圖片的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 一区二区三区国产精品 | 久久精品爱国产免费久久 | 国产伦精品一区二区三区免 | 欧美日韩亚洲精品一区 | 欧美日韩在线看 | 亚洲国产精品综合久久2007 | 日本一区二区三区久久精品 | 国产精品高清一区二区三区不卡 | 精品一区二区久久 | 日韩免费毛片全部不收费 | 国产午夜精品久久久久九九 | 日韩欧美特一级大黄作a毛片免费 | 九九视频只有精品六 | 欧美三级一区二区 | 色婷婷综合和线在线 | 亚洲阿v天堂2021在线观看 | 香蕉久久视频 | 国产成人精品影院狼色在线 | 成人性生免费视频 | 国产精品免费_区二区三区观看 | 最近免费中文在线视频 | 青青草国产一区二区三区 | 亚洲成人综合网站 | 亚洲精品99久久一区二区三区 | 免费中文字幕在线国语 | 国产精品第一页第一页 | 俄罗斯一级毛片aaaa | 免费人成黄页在线观看忧物 | 来个黄色网址 | 免费观看一区二区 | 成人在线免费小视频 | 在线免费观看精品 | 国产在线视频www色 国产在线视频一区 | 天天看天天射天天碰 | 亚洲欧美日韩国产综合 | 久久青青国产 | 国产理论自拍 | 黄色大片免费看 | 色草在线 | 夜色www国产精品资源站 | 国产一区二区三区鲁婷婷 |