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