antd proプロジェクトの中でantd Uploadコンポーネントはlrzに基づいてアップロードする前に写真の圧縮をします.
2609 ワード
lrz npmとパラメータドキュメントは参考にできます.
import { Upload,Button} from 'antd';
import lrz from 'lrz';
//
function compress(file){
try{
let ratio=1;
const {size}=file;
// 1M ,
if( (size!=undefined)&&size>1048576){
// 1M , 1M
ratio=1048576/size + '';
ratio=parseFloat(ratio).toFixed(2);
console.log(' ',ratio);
return lrz(file,{quality: ratio}).then((rst)=>{// ,
console.log(rst)
return backPromise(rst);
})
.catch(()=>{
console.log(' ');
return false
})
}else{
console.log(' ');
return true;
}
}catch(e){}
}
function backPromise(res){
return new Promise(function(resolve,reject){
if(res instanceof Object){
// base64
let file=dataURLtoFile(res.base64,res.origin.name);
console.log('base64tofile',file);
// uid
Object.assign(file,{uid:file.lastModified});
resolve(file);
console.log(' ')
}else{
reject(' ')
}
})
}
// , copy , , 。
function dataURLtoFile(dataurl, filename){
var arr = dataurl.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var bstr = atob(arr[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
// file
return new File([u8arr], filename, {type:mime});
// blob
//return new Blob([u8arr],{type:mime});
}
//
export default class CompressPict extends React.Component{
constructor(props){
super(props);
}
beforeUpload=(file)=>{
console.log('file',file);
const p=compress(file);
// : , false 。
// Promise ,
//Promise reject
//resolve ( resolve File Blob resolve )。
console.log(p);
return p;
}
render(){
return(
)
}
}