React使用antd的upload组件上传图片到阿里云,服务端签名

  • 时间:2020-04-24 12:58 作者:六二小盆友 来源: 阅读:728
  • 扫一扫,手机访问
摘要:在React框架中使用antd组件里面upload组件上传图片到阿里云。antd有官方文档,但是有点复杂了,实际上用不了那么多的方法,我简化了一下。我使用服务端签名,前台传。首先是后台代码 public static Map String,String getSignatureAndPolicy

在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>)    }}

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

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】从谷歌到手机厂商都下决心了,要清除32位应用这匹“害群之马”(2025-10-17 05:41)
【系统环境|】Windows上使用QEMU创建aarch64(ARM64)虚拟机(2025-10-17 05:40)
【系统环境|】nodejs 如何安装在aarch64平台(2025-10-17 05:39)
【系统环境|】常用git命令-从远程更新代码合并分支、提交代码等(2025-10-17 05:38)
【系统环境|】技术干货|常用的 Git 功能和选项(2025-10-17 05:38)
【系统环境|】掌握git命令,图解一目了然(2025-10-17 05:37)
【系统环境|】总结几个常用的Git命令的使用方法(2025-10-17 05:36)
【系统环境|】这篇 Git 教程太清晰了,很多 3 年经验程序员都收藏了(2025-10-17 05:35)
【系统环境|】Git常用命令及操作指南(2025-10-17 05:35)
【系统环境|】「实用」盘点那些开发中最常用的Git命令(2025-10-17 05:34)
手机二维码手机访问领取大礼包
返回顶部