React 如何进行上传图片 #11

简介: React 如何进行上传图片 #11

标签


<input
 id="upload-file"
 accept="image/*"
 type="file"
 ref="upload"
 hidden="hidden"
 onChange={this.upload.bind(this, 1)}
/>

input标签的type设置为file属性 //属性,支持很多类型,这里设置为只上传图片 /


/隐藏文字,做下面这种效果的时候,就需要隐藏文字。

onChange //上传完成后的回调accepthidden


JS代码


upload() {
    let files;
    files = this.refs.upload.files
    let count = files.length;
    let formData = new FormData();
    for (let i = 0; i < count; i++) {
        files[i].thumb = URL.createObjectURL(files[i]);
        formData.append('filedata', files[i]);
    }
}

这里主要是通过 来获取上传之后的文件,然后通过 静态方法创建一个 (mac测试通过 input 上传过来 是空的),然后追加进formData。再通过方法传进后端this.refs.uploadcreateObjectURLDOMStringwebkitRelativePathsend(body: formData)


后端


const express = require('express');
const multiparty = require('multiparty');
const gm = require('gm').subClass({
    imageMagick: true
});
const fs = require('fs');
router.put(`uploadImages`, function (req, res) {
    let datas = {};
    if (!(fs.existsSync('./images/'))) {
        fs.mkdir('./images/', function (err, status) {
        });
    }
    const form = new multiparty.Form({
        uploadDir: './images/'
    });
    form.parse(req, function (err, fields, files) {
        const filesTmp = files.filedata;
        if (err) {
            throw err;
        } else {
            const relPath = filesTmp;
            for (let i in relPath) {
                gm(relPath[i].path)
                    .resize(240, 240)
                    .noProfile()
                    .write(relPath[i].path, function (err, data) {
                        if (err) {
                            throw err;
                        }
                        console.log(data);
                    });
            }
        }
    });
});

后端用的是node.js,express框架。fs模块,来进行判断是否存在该文件夹,如果不存在,则创建。

返回值为true or false 创建文件夹 multiparty模块来解析form表单

gm 进行裁剪图片。fs.existsSync()fs.mkdir()


错误处理


1、Error: unsupported content-type

这个错误是因为你的content-type设置错了,设置成即可。multipart/form-data

2、设置完成之后,还是不行。

去掉的设置

//body的内容为表单内容headersbody: formData

3、上传一次图片之后,无法上传第二次,是因为value此时有值,没有进行清空处理,在上传成功回调里,进行e.target.value = '';

目录
相关文章
|
8月前
使用react-vant上传图片遇到的问题
使用react-vant上传图片遇到的问题
|
开发框架 前端开发 API
react上传图片
react上传图片
179 1
|
9月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
450 0
|
9月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
96 0
|
9月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
96 0
|
9月前
|
存储 前端开发 JavaScript
【第29期】一文学会用React类组件编写组件
【第29期】一文学会用React类组件编写组件
94 0
|
9月前
|
前端开发 开发者
【第26期】一文读懂React组件编写方式
【第26期】一文读懂React组件编写方式
79 0
|
9月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
160 0
|
9月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
71 1
|
9月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
139 1