当前位置:首页 » 新闻中心 » 正文

百度全国开户优惠:18834196600(微信同号)
分类页和文章页“当前位置”下方广告(移动版)

山西网站建设解答如何在Vue表单中处理图片

126 人参与  2021年05月22日 09:12  分类 : 新闻中心  点这评论

山西网站建设解答如何在Vue表单中处理图片

这篇文章主要介绍了如何在 Vue 表单中处理图片,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下

问题:

我在 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
class="form-control-file"
type="file"
accept="image/*"
v-bind="formdata.photo"
/>
<br/>
<input id="submit" 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/*" class="form-control-file"
@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 表单中处理图片的资料请关注脚本之家其它相关文章!

来源:脚本之家

链接:https://www.jb51.net/article/204814.htm

申请创业报道,分享创业好点子。,共同探讨创业新机遇!

来源:龙采科技(微信/QQ号:490801481),转载请保留出处和链接!

本文链接:https://paishoes.com/post/3215.html

太原百度公司
文章底部广告(移动版)
百度分享获取地址:http://share.baidu.com/code

本文标签:山西网站建设  山西做网站  山西网站开发  山西vue  山西建站公司  

微信公众号:QQ490801481 关注1元购买iPhone6!

加入【网络营销联盟】QQ群:490801481(加群验证:小小蚂蚁博客)

这里的内容可以随意更改,在后台-主题配置中设置。

<< 上一篇
百度全国开户优惠:18834196600(微信同号)
评论框上方广告(移动版)

相关文章

    网络推广 | 网络营销 | 本站主题 | 网络创业 | 电子商务 |TAG分类

    龙采科技@Copyright Your WebSite.Some Rights Reserved.晋ICP备19010871号

    客服微信:17635390113点击复制并跳转微信