AJAX上传二进制文件。图片上传预览

我们经常会遇见需要上传图片的时候,比如我写这篇文章,展现代码效果就上传了结果的截图。

此时就遇到问题,之前单一的静态网页就不够用了。试试AJAX上传。做一个上传二进制文件,我文件为图片,并且上传之后加载可以预览。

AJAX上传二进制文件。图片上传预览

结果截图如下:

app.js里面的内容:ajax(接口)


//1.引入express框架
const express = require('express');
const formidable = require('formidable');
//2.创建一个对象
const app = express();
const formOptions = {
    //文件上传保存的地址
    uploadDir: './uploads',
    //保留文件的后缀名信息
    keepExtensions: true
}
const _form = formidable(formOptions);
//3.创建一个路由规则。(一个页面路径)
// app.get('/', function () {

// })
//配置网站静态资源目录
app.use(express.static('./public'));

//配置formidable
const options = formidable({
    uploadDir: './public/uploads',
    keepExtensions:true
})
const form = formidable(options);
//14 文件预览上传
app.all('/uploads', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    let _imgurl;
    form.parse(req, (err, fileds, files) => {
        // _imgurl = files.avatar.newFilename;
        // console.log(files.avatar.filepath);
        res.send(JSON.stringify(files));
        // res.status(200).send(JSON.stringify);
    })
    // form.on('end', function () { 
    //     res.send(JSON.stringify({
    //         imgurl:_imgurl
    //     }));
    // })
})
app.get('/', (request, response) => {
    response.send('test');
});

 //4.设置运行端口,监听运行。
 //80   这个可以自己设置,下面自己设置一个端口8001
app.listen(8001, () => {
    console.log('服务端已启动,当前端口为:8001使用中....');
});

//5.启动服务  执行  在下面命令窗口输入node app.js  和自己起的名字一样

接着是html的内容:

里面引入了:bootstrap-v4,js,以及axios.

bootstrap-v4.为了写进度条,使用里面的小工具插件。

AJAX用的是axios请求。

<!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>
    <link rel="stylesheet" href="./bootstrap-v4/plugins/bootstrap-4.6.1-dist/css/bootstrap.min.css">
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="col-md-2"></div>
            <div class="col-md-8">
                <div class="form-group">
                    <input type="file" name="avatar" class="form-control-file" id="upload">
                </div>
            </div>
            <div class="col-md-2"></div>
        </div>
        <div class="row">
            <div class="col-md-2"></div>
            <div class="col-md-8">
                <div class="progress">
                    <div id="progressBar" class="progress-bar progress-bar-striped progress-bar-animated"
                        role="progressbar">
                    </div>
                </div>
            </div>
            <div class="col-md-2"></div>
        </div>
        <div class="row">
            <div class="col-md-2"></div>
            <div class="col-md-8" id="imgpre"></div>
            <div class="col-md-2"></div>
        </div>
    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="./bootstrap-v4/resource/js01.js"></script>
    <script src="./test/axios.min.js"></script>
    <script>
        //FormData上传文件

        let _upload = document.getElementById('upload');
        //
        _upload.onchange = function () {
            // 文件上传监听
            let _file = this.files[0];
            // console.log(_file[0])
            let _formdata = new FormData();
            _formdata.append('avatar', _file);
            axios({
                url: 'http://127.0.0.1:8001/uploads',
                method: 'POST',
                headers:{
                    'Content-Type':'multipart/form-data'
                },
                data: _formdata,
                onUploadProgress: function (ev) {
                    let _loaded = ev.loaded;
                    let _total = ev.total;
                    // console.log(_loaded, _total);
                    //上传比例
                    let _progress = parseInt((_loaded / _total) * 100) + '%';
                    let _progressBar = document.getElementById('progressBar');
                     _progressBar.style.width = _progress;
                     _progressBar.innerHTML = _progress;


            }
            }).then((res) => {
                // console.log(result)
                //  let _imgurl = res.data.avatar.filepath;
                //   console.log(_imgurl);
                 let _imgurl = res.data.avatar.filepath.split('public')[1];
                 _imgurl = 'http://127.0.0.1:8001' + _imgurl;
                 let _img = document.createElement('img');
                 _img.src = _imgurl;
                 _img.style.maxWidth = '100%';
                 document.getElementById('imgpre').appendChild(_img);
                //  console.log(_imgurl);
            }).catch((err) => {

            })
        }
    </script>
</body>

</html>

本篇代码用的“POST”请求。

’在进行Ajax开发时,经常使用GET方式或POST方式发送请求。

  • GET方式适合从服务器获取数据。

  • POST方式适合向服务器发送数据。需要设置内容的编码格式,告知服务器用什么样的格式来解析数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值