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 = '';

目录
相关文章
使用react-vant上传图片遇到的问题
使用react-vant上传图片遇到的问题
|
开发框架 前端开发 API
react上传图片
react上传图片
278 1
|
3月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
8月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
297 68
|
8月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
273 67
|
8月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
321 62
|
11月前
|
移动开发 前端开发 API
React 音频播放器组件 Audio Player
本文介绍如何使用React创建音频播放器组件,涵盖核心功能如播放/暂停、进度条、音量控制和时间显示。通过HTML5 `&lt;audio&gt;` 元素和React的声明式状态管理,实现交互式音频播放。常见问题包括控件不响应、进度条无法更新和音量控制失灵,并提供解决方案。此外,还讨论了浏览器兼容性、异步错误处理和性能优化等易错点及避免方法。
788 123
|
10月前
|
前端开发 JavaScript
除了使用Route组件,React Router还有其他方式处理404错误页面吗
除了使用Route组件,React Router还有其他方式处理404错误页面吗
279 58
|
10月前
|
前端开发
React 中高阶组件的原理是什么?
React 中高阶组件的原理是什么?
248 57
|
10月前
|
前端开发 开发者
除了函数组件和类组件,React 还有其他创建组件的方式吗?
除了函数组件和类组件,React 还有其他创建组件的方式吗?
196 57