React使用antd的upload组件上传图片到阿里云,服务端签名
来源:     阅读:729
云上智慧
发布于 2020-04-24 12:58
查看主页

在React框架中使用antd组件里面upload组件上传图片到阿里云。
antd有官方文档,但是有点复杂了,实际上用不了那么多的方法,我简化了一下。

我使用服务端签名,前台传。
首先是后台代码

  public static Map<String,String> getSignatureAndPolicy(){        Map<String, String> returnMap = new HashMap<>();        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);        long expireTime = 3600;//过期时间加一天        long expireEndTime = System.currentTimeMillis() + expireTime * 1000*24;        Date expiration = new Date(expireEndTime);        PolicyConditions policyConds = new PolicyConditions();        policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);        String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);        byte[] binaryData = new byte[0];        try {            binaryData = postPolicy.getBytes("utf-8");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        String encodedPolicy = BinaryUtil.toBase64String(binaryData);        String postSignature = ossClient.calculatePostSignature(postPolicy);        returnMap.put("signature",postSignature);        returnMap.put("policy",encodedPolicy);        return returnMap;    }

获取到了policy和signature,接下来是前台代码

const GLOBAL_VAR={ossUploadUrl:bucketname+endpoint ,//例如 http://bucketname.oss-cn-chengdu.aliyuncs.comaccessKeyId:accessKeyId,//你的阿里云accessKeyId}class UploadImgForm extends React.Component{    constructor(props){        super(props)        this.state = {            fileList:[],            ossData:new Object()        }    }    componentDidMount() {        this.getSignatureAndPolicy()    }    getSignatureAndPolicy=()=>{//这是向后端发送请求,获取policy和signature        Ajax.post("bizActivity/getSignatureAndPolicy",{},{},(xhr,data)=>{            let ossData = this.state            ossData.policy = data.data.policy            ossData.signature = data.data.signature            ossData.expire = new Date().getTime()            ossData.host = GLOBAL_VAR.ossUploadUrl            ossData.accessId = GLOBAL_VAR.accessKeyId            this.setState({ossData})        })    }    getExtraData = file => {        const { ossData } = this.state;        return {            key:file.name,            OSSAccessKeyId: ossData.accessId,            policy: ossData.policy,            Signature: ossData.signature,            success_action_status:200        };    }    render(){        const { getFieldDecorator, getFieldValue } = this.props.form;        const { stepList, activityId } = this.props        const formItemLayout = {            labelCol: { span: 5 },            wrapperCol: { span: 16 }        };//注意这里的name的值不要是multiplefile,会请求失败        const props = {            name: 'file',            action:GLOBAL_VAR.ossUploadUrl,            multiple:true,            showUploadList:{                showPreviewIcon: false, showRemoveIcon: false, showDownloadIcon: false            },            listType:"picture",            data: this.getExtraData,            fileList:this.state.fileList,            onChange: ({ fileList,file }) => {                this.setState({ fileList:fileList })            },        }        return (<Form>            <Form.Item {...formItemLayout} label="上传图片">                <Upload {...props} >                    <Button >上传图片</Button>                </Upload>            </Form.Item>        </Form>)    }}

就是这样简单啦,有问题的可以评论大家探讨下哦。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
什么是腾讯云轻量应用服务器?轻量云主机优惠价格表
老程序员给年轻程序员的十条建议。
为什么会 python 的人会被另一半爱的死去活来?
学习Go-第三天-基础语法(整型:int、int8、int16、int32、int64)
js解决java中的占位符,全局替换括号中的数据
首页
搜索
订单
购物车
我的