方法1: 通过插件去上传 (还有好多漏洞,改了好几个,暂时没找到改好的代码,只能先上传这个了)
首先引入插件 <script src="__PUBLIC__/Home/js/ajaxfileupload.js"></script>
注意:: 据说对jq有版本要求(先引入jq)
html 代码:
营业执照: <input type="file" id="upImg" name="upload" value="上传" >
$('#upImg').on("change", function(){var arr=$(this).val().split('.');
var type=arr.pop().toLowerCase();
if(type==='jpg'||type==='png'||type==='gif'||type==='jpeg'||type==='pdf'){
$.ajaxFileUpload({
url:"{:U('UserCommon/save_upload_img')}",type: 'post', secureuri :false,dataType:'json',
fileElementId :'upImg', //file控件ID
success : function (data){
if(1 != data.total) return;//因为此处指允许上传单张图片,所以数量如果不是1,那就是有错误了
var url = data.files[0].path;
var new_url=url.substr(1);
$('#show_img_url').attr('src',new_url);
}
});
}else{
layer.alert('上传文件类型只能是jpg,png,gif,jpeg,pdf格式,请重新选择!!!', {skin: 'layui-layer-molv' ,closeBtn: 0 });
}
});
protected function ensure_writable_dir($dir) {
if(!file_exists($dir)) {
mkdir($dir, 0766, true);
chmod($dir, 0766);
chmod($dir, 0777);
}else if(!is_writable($dir)) {
chmod($dir, 0766);
chmod($dir, 0777);
if(!is_writable($dir)) {
throw new FileSystemException("目录 $dir 不可写");
}
}
}
function save_upload_img() {
$files = array();
$success = 0;
foreach ($_FILES as $item) {
$index = count($files);
$files[$index]['srcName'] = $item['name']; //上传图片的原名字
$files[$index]['error'] = $item['error']; //和该文件上传相关的错误代码
$files[$index]['size'] = $item['size']; //已上传文件的大小,单位为字节
$files[$index]['type'] = $item['type']; //文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"
$files[$index]['success'] = false; //这个用于标志该图片是否上传成功
$files[$index]['path'] = ''; //存图片路径
if($item['error'] != 0) continue; // 接收过程有没有错误
//判断图片能不能上传
if(!is_uploaded_file($item['tmp_name'])) {
$files[$index]['error'] = 8000;
continue;
}
$extension = '';//扩展名
if(strcmp($item['type'], 'image/jpeg') == 0) $extension = '.jpg';
else if(strcmp($item['type'], 'image/png') == 0) $extension = '.png';
else if(strcmp($item['type'], 'image/gif') == 0) $extension = '.gif';
else {
//如果type不是以上三者,我们就从图片原名称里面去截取判断去取得(处于严谨性)
$substr = strrchr($item['name'], '.');
if(FALSE == $substr) {
$files[$index]['error'] = 8002;
continue;
}
//取得元名字的扩展名后,再通过扩展名去给type赋上对应的值
if(strcasecmp($substr, '.jpg') == 0 || strcasecmp($substr, '.jpeg') == 0 || strcasecmp($substr, '.jfif') == 0 || strcasecmp($substr, '.jpe') == 0 ) {
$files[$index]['type'] = 'image/jpeg';
}
else if(strcasecmp($substr, '.png') == 0) $files[$index]['type'] = 'image/png';
else if(strcasecmp($substr, '.gif') == 0) $files[$index]['type'] = 'image/gif';
else {
$files[$index]['error'] = 8003;
continue;
}
$extension = $substr;
}
$md5= uniqid();//md5_file($item['tmp_name']);
//取得图片的大小
$imageInfo = getimagesize($item['tmp_name']);
$rawImageWidth = $imageInfo[0];
$rawImageHeight = $imageInfo[1];
$path = './Upload/no_regular/'.date("Y-m-d")."/";
$this->ensure_writable_dir($path);
$name = $md5.$extension;
move_uploaded_file($item['tmp_name'], $path.$name);
$files[$index]['path'] = $path . $name; //存图片路径
$files[$index]['success'] = true; //图片上传成功标志
$files[$index]['width'] = $rawImageWidth; //图片宽度
$files[$index]['height'] = $rawImageHeight; //图片高度
$success ++; //成功+1
}
echo json_encode(array(
'total' => count($files),
'success' => $success,
'files' => $files
));
}
方法2: 做一个隐藏的表单上传(里面加了反斜杠,php代码是在tp框架下的)
<\div class="form-group"> <\label class="col-sm-4 control-label">*营业执照: <\div class="col-sm-6"> <\input type="button" class="btn btn-primary" value="上传" id="falseupload" style="width: 23%;position: relative;left: -4px;border-top-left-radius: 0px;border-bottom-left-radius: 0px;" /> <\input type="text" class="form-control" readonly name="corp_license_img" id="corp_license_img" style="width: 77%;float: left;border-right: 0px;" placeholder="未选择任何文件..." data-toggle="tooltip" data-placement="top"/> <\span class="btn-link btn-checkPhoto" id="see_edit_img" style="display:none;position: absolute;top: 10px;left: 283px;width: 100px;">查看图片
<\form id="formupload" style="display:none" enctype="multipart/form-data"> <\input type="file" id="trueupload" name="upload" value="上传">
$("#falseupload").click(function(){ $("#trueupload").click(); });
$("#trueupload").on("change",function(){ var uploadform =new FormData($("#formupload")[0]); $.ajax({ url:"{:U('UserCommon/fileUpload')}",type: "post",dataType:'json', timeout : 60*1000,processData: false,contentType: false, data:uploadform, success: function(d){ if(d.status==='ok'){ $("#show_img_url").attr("src",d.msg); $('#see_edit_img').css("display","block"); $("#corp_license_img").val(d.msg); }else{ layer.alert(d.msg, {skin: 'layui-layer-molv',closeBtn: 0}); } },error:function(msg){ console.log("error",msg); } }); });
function fileUpload(){
$path="no_regular/".date("Y-m-d");
foreach ($_FILES as $k=>$v) {
$re=$this->uploadFile($v,$path);
}
$this->ajaxReturn($re);
}
function uploadFile($img,$path) {
$upload = new \Think\Upload();
$upload->rootPath ="./Upload/";
$upload->subName=$path;
$upload->mimes= C('mimes');
$upload->maxSize= C('maxSize');
$upload->exts= C('exts');
$info = $upload->uploadOne($img);
if(!$info) return ['status'=>'no','msg'=>$upload->getError()];
else return ['status'=>'ok','msg'=>"/Upload/".$info['savepath'].$info['savename']];
}