elink

1.用formData对象来保存二进制文件数据

2.将formData对象通过ajax上传给服务器

3.实时监听上传进度绘制进度条

4.将图片显示在页面中(服务器返回图片路径,客户端读取路径并显示图片)

 

代码中没有实现图片显示

前端代码

<div>
                <div class="form-group">
                    <label>请选择文件</label>
                    <input type="file" id="file" />
                </div>
                <div class="progress" style="width: 300px; height: 10px;background-color: #0000FE;">
                    <div class="progress-bar" style="height:100%; width: 0%; background-color: #00FF00;">0%</div>
                </div>
            </div>
            <script>
                // 获取文件选择空间
                var file = document.getElementById("file")
                // 获取进度条元素
                var pro = document.querySelector(\'.progress-bar\')
                file.onchange = function(){
                    // 创建空的formData对象
                    var formData = new FormData();
                    // 将用户选择的文件追加到formData表单对象中
                    formData.append(\'arrtName\',file.files[0])
                    // console.log(formData)
                    // 创建ajax对象
                    var xhr = new XMLHttpRequest();
                    // 对ajax对象进行配置
                    xhr.open(\'post\',\'http://localhost:3000/upload\')
                    // 在文件上传过程中持续触发
                    xhr.upload.onprogress = function(ev){
                        // ev.loaded 文件已经上传了多少
                        // ev.total 上传文件的总大小
                        var result = (ev.loaded/ev.total)*100 +\'%\'
                        pro.style.width = result;
                        pro.innerHTML = result;
                    }
                    xhr.send(formData)
                    // 监听响应
                    xhr.onload = function(){
                        if(xhr.status == 200){
                            console.log(xhr.responseText)
                        }
                    }
                }
            </script>

服务器端代码

const express = require(\'express\');
const path = require(\'path\');
// const bodyParser = require(\'body-parser\')
const formidable = require(\'formidable\')
const app = express()
app.all(\'*\', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "http://127.0.0.1:8848");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header(\'Access-Control-Allow-Headers\', \'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild\');
    res.header("X-Powered-By",\' 3.2.1\')
    res.header("Content-Type", "application/json;charset=utf-8");
    res.header("Access-Control-Allow-Credentials",true);
    next();
    });
app.post(\'/upload\',(req,res)=>{
    // 创建formidable表单解析对象
    const form = new formidable.IncomingForm();
    // 设置客户端上传文件的存储路径
    form.uploadDir = path.join(__dirname,\'uoload\')
    console.log(path.join(__dirname,\'upload\'))
    // 保留文件后缀
    form.keepExtensions = true;
    //解析formData对象
    form.parse(req,(err,fields,files)=>{
        res.send(files.arrtName.path)
    })
})
app.listen(3000);
console.log(\'app服务器启动成功\')

 

分类:

技术点:

相关文章:

  • 2021-12-28
  • 2021-11-20
  • 2021-07-01
  • 2018-08-15
  • 2021-11-16
  • 2021-12-27
  • 2018-03-14
  • 2021-11-20
猜你喜欢
  • 2021-11-20
  • 2021-11-20
  • 2021-12-27
  • 2021-11-20
  • 2021-11-20
相关资源
相似解决方案