AJAX异步上传Blob二进制数据流文件进行远程上传
AJAX异步上传Blob二进制数据流文件进行远程上传。
原理:通过FileReader获得文件信息,然后在页面上展示选择的文件,(可以通过canvas画图压缩图片),获得base64数据转成Blob二进制数据流,实例化FormData 创建form表单,然后进行ajax异步上传,后端接收图片进行上传,获得图片路径进行远程上传。
以php为例:
<?php
header("Content-type: text/html; charset=utf-8");
function curl_file($url, $filePath, $fileType){
// PHP版本大于等于5.5的
if(version_compare(phpversion(),'5.5.0') >= 0 && class_exists('CURLFile')){
$fields['file'] = new CURLFile($filePath);
$fields['file']->setMimeType($fileType);
// 上边两行也可以这样写:
// $fields['file'] = new CURLFile($filePath,$fileType);
}else{ // PHP 版本小于5.5的
$fields['file'] = '@'.$filePath;//加@符号curl就会把它当成是文件上传处理
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); //连接超时
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
$data=curl_exec ($ch);
//$info=curl_getinfo($ch);
curl_close($ch);
return $data;
}
// 调用示例:
$url = 'http://172.16.4.81:8080/test/temp/outupload.php'; // 远程请求连接
$filePath = realpath('./filetest/1.jpg'); // 获得文件绝对路径,如: E:/filetest/1.jpg
$fileType = 'image/jpeg'; // 文件类型
$result = curl_file($url,$filePath,$fileType);
print_r($result);
?>
注意 $filePath 参数必须是绝对路径。
远程端文件接收方法请查看下一篇或者上几篇文章。