博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AWS S3 上传文件
阅读量:5141 次
发布时间:2019-06-13

本文共 2846 字,大约阅读时间需要 9 分钟。

一、获取签名的URL

 通过后端给的接口拿到已经签名好的文件上传的URL地址

二、读取文件(注:AWS 接受的二进制,不能使用form-data)

// 获取文件二进制    getFileMd5 = (key: string,callback: (value: any)=>void) => {        const log: any = document.getElementById(key)        const file = log.files[0]        const reader = new FileReader();        reader.onload =  () => {            // console.log(reader.result);            callback(reader.result)        }        reader.readAsBinaryString(file)    }

  要在onload中去执行后续操作,reader.result返回文件的二进制

三、提供接口所需要的header参数以及文件参数

req.setRequestHeader('Content-MD5',md5Base64); req.setRequestHeader('x-amz-acl', 'public-read');
md5Base64 是文件的二进制转base64后的值 1、使用spark-md5将文件转为hash的二进制
import SparkMD5 from 'spark-md5'const binaryFile = SparkMD5.hashBinary(fileValue,true)// fileValue 为上面读取文件的二进制值

  2、使用base64将二进制转为base64

import Base64 from 'base-64'  const md5Base64 = Base64.encode(binaryFile)// binaryFile 为上面的二进制文件

四、拿到所有所需参数发送请求

$.ajax({            url,            type: "PUT",            data: file, // 源文件
beforeSend: (req) => {                req.setRequestHeader('Content-MD5',md5Base64);                req.setRequestHeader('x-amz-acl', 'public-read');            },            processData: false, // 不想转换数据的时候,需要手动将其设置为false            contentType: false, // 不设置content-type            success:(res) => {                console.log('res',res)                   const obj: any = {}                   // 图片上传成功                   switch(key) {                       case 'mb_banner':                           message.success('banner-mb图片上传成功!')                            obj.mobile_banner_url = url.split('?')[0]                            break                       case 'pc_banner':                            message.success('banner-pc图片上传成功!')                            obj.banner_url = url.split('?')[0]                            break                       case 'icon':                            message.success('分享icon图片上传成功!')                            obj.icon_url = url.split('?')[0]                            break                       default:                            break                   }                   this.props.setBannerImg(obj)            },error: err => {                switch(key) {                    case 'mb_banner':                        message.error('banner-mb图片上传失败!')                        break                    case 'pc_banner':                         message.error('banner-pc图片上传失败!')                         break                    case 'icon':                         message.error('分享icon图片上传失败!')                         break                    default:                         break                }                console.log(err)            }        });

  file: //let inputfile: any = document.getElementById(key)

    inputfile = inputfile.files[0]

转载于:https://www.cnblogs.com/detanx/p/AwsUploadFile.html

你可能感兴趣的文章
Xcode5和ObjC新特性
查看>>
LibSVM for Python 使用
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
解决ajax请求cors跨域问题
查看>>
《收获,不止Oracle》pdf
查看>>
LinkedList<E>源码分析
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Activity之间的跳转:
查看>>
实验四2
查看>>
Android现学现用第十一天
查看>>
多路复用
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Java学习笔记--字符串和文件IO
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>