粘贴图片并上传
最近在写博客的时候,纯MarkDown语法写,但是发现图片是个需求,需要经常截图并且写到MarkDown里面
之前的做法是用QQ截图,然后另存为到本地桌面,然后再上传,返回URI地址,贴到博客编辑器里面
最近发现有些页面支持图片粘贴上传的功能,研究了一番
1 2 3
| <div id="editDiv" contenteditable='true' placeholder='粘贴图片至此处'></div> <div id="imgs"></div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #editDiv{ color:black; width:100px; height:100px; border: 1px solid red; margin: 20px 50%; } #editDiv:empty:before{ content: attr(placeholder); color:red; }
#editDiv:focus:before{ content:none; }
|
这里有个浏览器属性,contenteditable,表示标签可以编辑,不能用input和textarea,因为input、textarea中只能接受字符串,对于html标签不进行转义以及渲染。
图片上传的是blob类型的流文件,固用div模拟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| let editDiv = document.getElementById('editDiv'); editDiv.addEventListener('paste',function(e){ let cbd = e.clipboardData; for(let i=0;i<cbd.items.length;i++){ let item = cbd.items[i]; if(item.kind == "file"){ let blob = item.getAsFile(); let data = new FormData(); data.append('file', blob); $.ajax({ url:'/upload.php', type:'post', contentType: false, processData: false, dataType:'json', data:data, success(res){ console.log(res.content) if(res.code===1000){ $('#imgs').append(`<img src="${res.content}">`) } } }) } } })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| $requestScheme = $_SERVER['REQUEST_SCHEME']; $host = $_SERVER['SERVER_NAME']; $baseUrl = $requestScheme . '://' . $host;
if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else if($_FILES["file"]) { $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); $fileType = $_FILES["file"]["type"];
$fileUrl = $baseUrl . "/upload/" . $_FILES["file"]["name"]; $absUrl = "upload/" . $_FILES["file"]["name"]; if(substr($fileType,0,5)==='image'){ $fileFullName = md5_file($_FILES["file"]["tmp_name"]).'.'.$extension; $fileUrl = $baseUrl . "/upload/img/" . $fileFullName; $absUrl = "upload/img/" .$fileFullName; } move_uploaded_file( $_FILES["file"]["tmp_name"], $absUrl ); $result = array('code' => 1000, 'content' => $fileUrl, 'msg' => '上传成功'); echo json_encode($result);
|
1
| 
|
其实在php文件里面,写了两套代码,当时浏览器访问的时候,get请求,返回页面渲染
post请求的时候,就是图片上传的代码
1 2 3 4 5 6
| $method = $_SERVER["REQUEST_METHOD"]; if($method=='POST'){ }else{ }
|

完结撒花