PHP使用之上传文件到本地服务器(实现上传文件后页面内容不动、解决上传文件命名乱码后缀问题)
2017-09-21 11:19
1301 查看
问题
因为有上传文件到服务器的业务需求,我在Mac下先尝试搭建本地服务器这里我使用XAMPP for Mac的软件来搭建本地服务器
具体实现见:http://blog.csdn.net/yxys01/article/details/52183975
一、启动服务器
安装好后,我们开始启动Apache服务器这里我们点击Start All,然后Apache Web Server后面的Status变为Running时,本地服务器便启动完毕
二、在本地服务器下放置index.html
在 应用程序->XAMPP->xamppfiles->htdocs 中新建test文件夹,放置你的网页文件
三、index.html
<script> function setImagePreview() { var docObj=document.getElementById("file"); var imgObjPreview=document.getElementById("preview"); if(docObj.files && docObj.files[0]) { //火狐下,直接设img属性 imgObjPreview.style.display = 'block'; imgObjPreview.style.width = '200px'; imgObjPreview.style.height = '200px'; //imgObjPreview.src = docObj.files[0].getAsDataURL(); //火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式 imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]); } else { //IE下,使用滤镜 docObj.select(); var imgSrc = document.selection.createRange().text; var localImagId = document.getElementById("localImag"); //必须设置初始大小 localImagId.style.width = "300px"; localImagId.style.height = "120px"; //图片异常的捕捉,防止用户修改后缀来伪造图片 try { localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)"; localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc; } catch(e) { alert("您上传的图片格式不正确,请重新选择!"); return false; } imgObjPreview.style.display = 'none'; document.selection.empty(); } return true; } </script> <html> <body> <iframe style="display:none" name="top"></iframe> <form action="upload_file.php" method="post" enctype="multipart/form-data" target="top"> <label for="file">Filename:</label> <input type="file" name="file" id="file" onchange="javascript:setImagePreview();"> <div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div> <br> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>
其中
要实现上传文件后页面内容不动
<iframe style="display:none" name="top"></iframe> <form action="upload_file.php" method="post" enctype="multipart/form-data" target="top">
解决方案:使用动态创建节点。
原理就是使用iframe上传、里面再创建一个form节点、让这个form提交到iframe里面。这样页面就可以无刷新了
这里是给 form 加个target=”” 属性,再加个隐藏的iframe标签,就跳到这里来,防止表单上传新建网页
四、upload.php
<?php session_start(); $_SESSION["userid"]="zxh"; if (1)//这个地方可以填写上传文件的限制,比如格式大小要求等,为了方便测试,这里没有写上传限制。 { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />";//获取文件返回错误 } else { //打印文件信息 echo "Upload: " . $_FILES["file"]["name"] . "<br />";//获取文件名 echo "Type: " . $_FILES["file"]["type"] . "<br />";//获取文件类型 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";//获取文件大小 echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";//获取文件临时地址 //自定义文件名称 $array=$_FILES["file"]["name"]; $array=explode(".",$array); //将文件名以点号分开,分别获取文件名和后缀名 $newfilename=$array[0];//自定义文件名($array[0]为点号前面的文件名) $_FILES["file"]["name"]=$newfilename.".".$array[1];//($array[0]为点号后面的后缀名) if (!is_dir("upload/".$_SESSION["userid"]))//当路径不存在 { mkdir("upload/".$_SESSION["userid"],0777,true);//创建路径 } $url="upload/".$_SESSION["userid"]."/";//记录路径 if (file_exists($url.$_FILES["file"]["name"]))//当文件存在 { echo $_FILES["file"]["name"] . " already exists. "; echo "<script> alert('文件已存在') </script>"; } else//当文件不存在 { $url=$url.$_FILES["file"]["name"]; if(move_uploaded_file($_FILES["file"]["tmp_name"],$url)) { echo "<script> alert('上传成功') </script>"; } else { echo "<script> alert('上传失败') </script>"; } echo "Stored in: " . $url; } } } else { echo "Invalid file"; } ?>
这里我是假设的文件名只有一个点号,将其切分为文件名和其后缀名
//自定义文件名称 array=$_FILES["file"]["name"]; $array=explode(".",$array); //将文件名以点号分开,分别获取文件名和后缀名 $newfilename=$array[0];//自定义文件名($array[0]为点号前面的文件名) $_FILES["file"]["name"]=$newfilename.".".$array[1];//($array[0]为点号后面的后缀名)
好吧,其实直接注释掉也没问题,这里只是自定义文件名称的一种方式而已
注意:创建路径
mkdir("upload/".$_SESSION["userid"],0777,true);//创建路径
若存在权限问题,解决办法见http://blog.csdn.net/yxys01/article/details/78032848
相关文章推荐
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- Myeclipse中文件已经上传到服务器目录下,文件也没有被占用,但是页面中无法读取和使用问题的解决方法
- PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
- PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
- [PHP] 本地服务器正常,FTP上传到服务器后页面出现乱码
- 解决本地文本文件上传到服务器乱码问题(C#),ANSI转UTF-8编码
- 使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
- 使用php对百度云BCS上传本地文件的实现及原理分析
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 使用FileZilla解决从Windows上传文件到Linux vsftpd的乱码问题!
- 获取文件上传页面中文数据时乱码问题的解决办法
- 【转载】使用jsp实现文件上传到服务器或者从服务器上下载文件到本地计算机完整说明版
- PHP中完美解决fckeditor上传中文文件与新建中文目录出现乱码的问题
- 解决本地文本文件上传到服务器乱码问题(C#),ANSI转UTF-8编码
- 使用enterprisedt上传到ftp服务器中文文件名异常、乱码问题解决
- 文件上传 通过隐藏iframe的方式来实现ajax上传文件并返回处理结果 ie乱码问题解决
- 使用PHP向Mysql数据库插入信息,页面中文内容显示正常,但在数据库里却是乱码,这个怎么解决?
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决