前端如何实现本地图片上传?
摘要
对于学习前端的小伙伴都有一个困惑,就是平常想上手小项目,但碍于不想购买服务器,实践受到了限制。
一般我选择node.js搭建服务器,毕竟基于JavaScript语言,简直不是一家人不进一家门。
但是,刚学node.js只会链接数据库进行增删改查,图片上传简直就是渣渣……
现在,我的思路是这样的,在没有云服务器的情况下,利用node.js搭建本地服务器,将图片放在项目项目目录下,名字最好排序,方便前端项目遍历……
前端页面设计和代码实现
在前端页面中需要包含一个表单,用于用户上传图片。表单中需要设置 enctype 属性为 “multipart/form-data”,这样才能上传二进制文件(图片)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<form action="http://127.0.0.1:3000/upload" method="post" enctype="multipart/form-data" target="_parent">
<input type="file" name="image" />
<input type="submit" value="上传" />
</form>
</body>
</html>
后端服务器代码实现
安装模块
1. npm init -y
2. npm i express multer -S
在后端服务器中,需要使用 Node.js 的 express 框架来创建路由。具体的实现方式如下:
const express = require('express')
const multer = require('multer')
const app = express()
let index = 0
//设置存储路径和文件名
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads')
},
filename: function (req, file, cb) {
index += 1
cb(null, index + '.png')
}
})
const upload = multer({ storage: storage })
app.post('/upload', upload.single('image'), function (req, res, next) {
const file = req.file
if (!file) {
const error = new Error('请上传图片')
error.httpStatusCode = 400
return next(error)
}
res.send({ msg: '上传成功' })
})
app.listen(3000, function () {
console.log('服务器已经启动')
})
在上述代码中,使用了 multer 中间件来处理图片上传。具体实现步骤如下:
- 设置存储路径和文件名;
- 初始化上传配置对象;
- 创建一个路由用于处理文件上传; 启动服务器,监听 3000 端口。
封装组件
<template>
<div>
<input type="file" @change="handleUpload">
<button @click="uploadImage">上传</button>
</div>
</template>
<script>
export default {
name: "ImageUploader",
data() {
return {
file: null,
imageUrl: "",
};
},
methods: {
handleUpload(event) {
this.file = event.target.files[0];
},
uploadImage() {
const formData = new FormData();
formData.append("image", this.file);
// 发送上传请求
axios.post("/upload", formData).then((res) => {
this.imageUrl = res.data.imageUrl;
});
},
},
};
</script>
这个组件包含一个文件选择框和一个上传按钮,用户可以通过选择文件来上传图片。当用户点击上传按钮时,会将图片通过 axios 库发送给后端 /upload 接口进行处理,然后将图片链接赋值给 imageUrl 变量,以便在页面上显示上传的图片。请注意,这只是一个简单的示例,实际上还需要对上传的图片进行一些检查和处理,例如检查文件大小、类型和命名等。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)