美文网首页
formidable处理上传的文件或图片

formidable处理上传的文件或图片

作者: 金桔柠檬加冰 | 来源:发表于2018-08-24 13:04 被阅读0次

formidable处理上传的文件或图片

formidable处理POST方式提交的表单数据

1 下载并应用包

npm i formidable -S/-D //下载包

var formidable = require('formidable') //引用包

2 创建基本的表单结构

 <form action="/add" method="POST" enctype="multipart/form-data">
            <input type="hidden" name="img" id="img1">
            <table class="table table-hover">
                <tr>
                    <td>姓名:</td>
                    <td>
                        <input type="text" name="name">
                    </td>
                </tr>
                <tr>
                    <td>性别:</td>
                    <td>
                        <input id="nan" name="gender" value="男" type="radio">
                        <label for="nan">男</label>
                        <input name="gender" value="女" type="radio" id="nv">
                        <label for="nv">女</label>
                    </td>
                </tr>
                <tr>
                    <td>头像:</td>
                    <td>
                        <img src="" alt="" id="photo" width="100">
                        <input type="file" id="img">
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="button" id="sub" value="新增">
                    </td>
                </tr>
            </table>
        </form>
//发送ajax请求
 // 我们希望用户一旦选择了文件就进行文件的上传操作:好处就是能够提高用户体验
    $('#img').on('change', function () {
        // 1.上传文件往往会使用FormData对象来收集文件数据
        var formdata = new FormData()
        // 2.获取文件数据
        var file = document.querySelector('#img').files[0]
        // 3. 将文件数据添加到formdata对象中,这个formdata对象可以直接做为数据传递
        formdata.append('img', file) //file
        formdata.append('username', 'jack') //fields
        console.log(formdata);
        // 发送异步请求,实现文件数据的上传
        // 当使用formdata+ajax实现文件上传的时候,必须添加两个属性设置
        $.ajax({
            type: 'post',
            url: '/fileUpload',
            data: formdata,
            dataType: 'json',
            processData: false, //告诉ajax不要处理数据,由formdata处理
            contentType: false, //告诉ajax不要对数据进行编码处理,由formdata处理
            success: function (result) {
                console.log(result)
                if (result.code == 200) {
                    // 实现预览
                    $("#photo").attr('src', '/images/' + result.myimg)
                }
            }
        })
    })

3 使用formidable处理随着请求传输过来的数据

 // 1.创建对象
    var form = new formidable.IncomingForm()
    // 2.设置编码:如果有普通键值对数据就最好设置
    form.encoding = 'utf-8'
    // 3.设置上传文件的存储目录
    form.uploadDir = __dirname +  '/images'
    // 4.设置是否保留文件的扩展名
    form.keepExtensions = true
    // 5.上传文件会执行parse函数
    // req:因为req中请求报文,而传递的数据都存储在请求报文中
    // 上传完毕后触调用回调函数,这个里面有三个参数
    // err:上传如果失败的错误信息
    // fields:数据传递成功普通的键值对存储对象
    // files:文件上传成功,存储着文件信息
    form.parse(req, function(err, fields, files) {
        if(err){
            var retValue= {
                code:100,
                msg:'上传失败'
            }
            res.end(JSON.stringify(retValue))
        }else{
            // basename:可以获取当前路径中的最后一个部分
            var filename = path.basename(files.img.path)
            var retValue = {
                code:200,
                msg:'上传成功',
                myimg:filename
            }
            res.end(JSON.stringify(retValue))
        }
    });

相关文章

网友评论

      本文标题:formidable处理上传的文件或图片

      本文链接:https://www.haomeiwen.com/subject/nlpbiftx.html