express + multer 实现文件上传(一)-- 基本上传

express框架,实现文件上传主要用到了 multer 插件

准备工作:

创建一个express项目,并支持html,教程请转至 nodejs+express+pm2 搭建服务器

安装依赖:

npm install --save multer

开始编码:

1、routers 文件夹下新建 upload.js 文件

const express = require('express');
const router = express.Router();
const multer = require('multer');

let upload = multer({
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, './uploads/');
        },
        filename: function (req, file, cb) {
            var changedName = (new Date().getTime())+'-'+file.originalname;
            cb(null, changedName);
        }
    })
});

//单个文件上传
router.post('/single', upload.single('singleFile'), (req, res) => {
    console.log(req.file);
    res.json({
        code: '0000',
        type: 'single',
        originalname: req.file.originalname,
        path: req.file.path
    })
});

//多个文件上传
router.post('/multer', upload.array('multerFile'), (req, res) => {
    console.log(req.files);
    let fileList = [];
    req.files.map((elem) => {
        fileList.push({
            originalname: elem.originalname
        })
    });
    res.json({
        code: '0000',
        type: 'multer',
        fileList: fileList
    });
});

module.exports = router;

2、在项目根目录下创建 uploads 文件夹 

3、app.js 引入改文件并使用

//引入路由
const multerUpload = require('./routes/upload');
//使用路由
app.use('/upload', multerUpload);

4、在 views 文件夹下 创建 index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <!-- 单文件上传 -->
    <div class="single">
        <div class="title">单个文件上传</div>
        <input type="file" name="singleFile" id="singleFile">
        <button class="submit">上传</button>
        <img src="" alt="" id="img">
    </div>
    
    <div class="multer">
        <div class="title">多个文件上传</div>
        <input type="file" name="multerFile" id="multerFile" multiple>
        <button class="submit">上传</button>
    </div>


    <div class="upbefore">
        <div class="title">可多次点击添加按钮,并预览</div>
        <div id="imgs"></div>
        <input type="file" id="upgteimg" value=""/>
        <button class="submit">上传</button>
    </div>

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script>
        // 单文件上传
        $('.single .submit').on('click', function () {

            var fileList = $('#singleFile')[0].files;
            console.log(fileList);
            var formData = new FormData();
            //此处文件名必须为 singleFile ,因为后台设置仅接口此文件名
            formData.append('singleFile', fileList[0]);

            $.ajax({
                url: '/upload/single',
                type: 'post',
                processData: false,
                contentType: false,//使用multer配合ajax时无需配置multipart/form-data,multer将自动配置,手动配置将报错,boundary not found
                data: formData,
                success: function (data) {
                    console.log(data)
                    $('#img').attr('src', data.path)
                }
            })
        });

        // 多文件上传
        $('.multer .submit').on('click', function () {

            var fileList = $('#multerFile')[0].files;
            console.log(fileList);
            var formData = new FormData();

            for (let i = 0; i < fileList.length; i++) {
                //此处文件名必须为 multerFile ,因为后台设置仅接口此文件名
                formData.append('multerFile', fileList[i]);
            }

            $.ajax({
                url: '/upload/multer',
                type: 'post',
                processData: false,
                contentType: false,
                data: formData,
                success: function (data) {
                    console.log(data)
                }
            })
        });

        // 可多次点击添加按钮,并预览
        let arr = [];
        let src = [];

        $('#upgteimg').on('change', function () {
            let $this = $(this)
            let url = URL.createObjectURL($this[0].files[0]);
            src.push(url);
            arr.push($this[0].files[0]);
            console.log(arr);
            console.log(src);
            showImg()
        })
        function showImg() {
            let html = ''
            for (let i = 0; i < src.length; i++) {
                const element = src[i];
                html += `<img src="${element}" alt="">`
            }
            $('#imgs').html(html);
        }
        $('.upbefore .submit').on('click', function () {
            var formData = new FormData();
            for (let i = 0; i < arr.length; i++) {
                //此处文件名必须为 multerFile ,因为后台设置仅接口此文件名
                formData.append('multerFile', arr[i]);
            }
            $.ajax({
                url: '/upload/multer',
                type: 'post',
                processData: false,
                contentType: false,
                data: formData,
                success: function (data) {
                    console.log(data)
                }
            })
        })
    </script>
</body>

</html>

5、启动服务即可

 

  • 16
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Vue项目中使用`multer`、`express`和`json-server`来实现图片并将图片存放在指定位置,你可以按照以下步骤进行操作: 1. 在Vue项目的根目录下,创建一个新的文件夹,例如`server`,用于存放服务器端代码。 2. 在`server`文件夹中创建一个新的JavaScript文件,例如`server.js`,作为服务器端代码的入口文件。 3. 在`server.js`文件中使用以下代码来创建一个简单的Node.js服务器,并配置`multer`来处理文件上传: ```javascript const express = require('express'); const multer = require('multer'); const path = require('path'); const app = express(); const upload = multer({ dest: 'uploads/' }); // 处理静态资源 app.use(express.static('public')); // 处理文件上传 app.post('/upload', upload.single('file'), (req, res) => { const file = req.file; const filePath = path.join(__dirname, 'uploads', file.filename); // 这里可以对上的文件进行进一步处理,例如存入数据库或移动到指定位置 res.json({ message: 'File uploaded successfully' }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on http://localhost:3000'); }); ``` 4. 在Vue项目的根目录下,打开命令行,并进入`server`文件夹。 5. 在命令行中运行以下命令来安装所需的依赖: ``` npm install express multer ``` 6. 在Vue项目的根目录下创建一个新的文件夹,例如`public`,用于存放静态资源。 7. 在Vue项目中使用`element-ui`或其他组件库,创建一个包含文件上传功能的组件。以下是一个示例: ```vue <template> <div> <input type="file" @change="handleFileChange" /> <button @click="uploadFile">Upload</button> </div> </template> <script> export default { data() { return { file: null, }; }, methods: { handleFileChange(event) { this.file = event.target.files[0]; }, uploadFile() { const formData = new FormData(); formData.append('file', this.file); fetch('http://localhost:3000/upload', { method: 'POST', body: formData, }) .then((response) => response.json()) .then((data) => { console.log(data.message); }) .catch((error) => { console.error('Error:', error); }); }, }, }; </script> ``` 在上述代码中,我们创建了一个包含文件上传功能的组件。当用户选择文件后,通过`FormData`对象将文件添加到请求体中,并使用`fetch`发送POST请求到服务器的`/upload`路由。 8. 运行Vue项目,并访问包含文件上传组件的页面。选择一个文件并点击上按钮,服务器将会接收到文件并将其存放在指定位置。 注意:在示例中,我们将上的文件存放在`uploads`文件夹中。你可以根据需要修改存放位置和其他配置。另外,确保在Vue组件中的请求URL匹配服务器的地址和端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值