HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>base64圖片上傳</title>
<script>
window.onload = function(){
var input = document.getElementById("demo_input");
var result= document.getElementById("result");
var img_area = document.getElementById("img_area");
if ( typeof(FileReader) === 'undefined' ){
result.innerHTML = "抱歉,你的瀏覽器不支持 FileReader,請使用現代瀏覽器操作!";
input.setAttribute('disabled','disabled');
}else{
input.addEventListener('change',readFile,false);
}
}
function readFile(){
var file = this.files[0];
//這裏我們判斷下類型如果不是圖片就返回 去掉就可以上傳任意文件
if(!/image\/\w+/.test(file.type)){
alert("請確保文件爲圖像類型");
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
console.log();
reader.onload = function(e){
result.innerHTML = this.result;
img_area.innerHTML = '<div class="sitetip">圖片img標籤展示:</div>![]('+this.result+')';
}
}
</script>
</head>
<body>
<form action="/admin/test/file" method="post">
<input type="file" value="sdgsdg" id="demo_input" />
<textarea name="img" id="result" rows=30 cols=300></textarea>
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
PHP接口代碼:
<?php
class TestController
{
public function fileAction(){
//接收base64數據
$image= $_POST['img'];
//設置圖片名稱
$imageName = "file_".date("His",time())."_".rand(1111,9999).'.png';
//判斷是否有逗號 如果有就截取後半部分
if (strstr($image,",")){
$image = explode(',',$image);
$image = $image[1];
}
//設置圖片保存路徑
$path = "./files/".date("Ymd",time());
//判斷目錄是否存在 不存在就創建
if (!is_dir($path)){
mkdir($path,0777,true);
}
//圖片路徑
$imageSrc= $path."/". $imageName;
//生成文件夾和圖片
$r = file_put_contents($imageSrc, base64_decode($image));
if (!$r) {
echo json_encode(['code'=>1,'message'=>'圖片生成失敗']);exit;
}else {
echo json_encode(['code'=>0,'message'=>'圖片生成成功']);exit;
}
}
}
可能出錯(base64長度過長導致):
413 Request Entity Too Large
解決思路:
修改nginx.conf
client_max_body_size 20M;
修改php.ini
upload_max_filesize = 20M
通過以上開啓nignx、php上傳限制後,還可能出現上傳失敗,可能是保存上傳文件的目錄權限不夠,解決思路:
chmod 777 files