PHP网页编程之JavaScript图片上传前预览和限制图片格...
在学习中,我也一直这样要求着自己。javascript|上传 这是一则PHP图片上传的例子,这里想申明的是在上传图片前,当用户从当地或是近程选择图片时可以预览图片,因为上传的图片有大有小,宽窄纷歧,上传后咱们都将对图片停止扩充处置,然而在上传前用户可否晓得扩充后的后果呢?并且可否在提交前就告知用户哪些图片格局是无效的呢?谜底是一定的,本例就是一个上载图片前预览图片,并按比例紧缩的实践例子,代码很复杂,次要是创立一个new Image(),然后给这个给这个image写入要显示的中央,而图片格局是不是无效,是经由过程文件上的后缀来判别的,js里没有直接验证文件的格局的函数,需求经由过程substring()文件名最初一个.来判别。本例后果固然能完成,但在预览时仍有两个成绩要注重
1,在Opera下,因为得不到上传框里的当地图片全体途径(只能失掉文件名),所以没法预览图片。
2,用Firefox近程会见本文件时,出于平安缘由,ff不答应预览当地的图片,在当地则可以。
注:这些在IE下均没有这些成绩。
以下是本例的全体代码:
<html>
<head>
<title>上载文件表单</title></head>
<style>
#con { background-color:#c1c1c1}
#t{width:100px;float:left;clear:both;}
#con li{display:inline;}
#perDiv{position:absolute;width:210px;left:420px;height:210px;background-color:;align:center}
</style>
<body>
upload example for php by jarry!
<form enctype="multipart/form-data" action="upload.php" name="uploadform" method="post">
<div id="perDiv" style="display:">
<br><br>这里是用来预览图片用
</div>
<div id="con">
<div id=t>请选择文件:</div>
<li><input name="upload_file" type="file" size="30" >(将近程图片的url粘贴出去也能够)</li><br>
<font size=-1>只承受后缀名为".gif",".jpg",".jpeg","png","bmp"的文件! </font><br>
<div id=t>称号:</div>
<li><input type=text value="11" size="30" name="name"></li><br>
<div id=t>描写:</div>
<li><textarea rows="5" cols="30" name="description">11</textarea></li><br>
<div id=t>上传人:</div>
<li><input type="text" value="11" size="40" name="uploader"></li><br>
<div id=t> </div><input type="submit" value="上传文件"><a href="showimg.php">检查图片</a><br>
</div>
<div id="divinfo"><br></div>
</form>
<br clear="both">
<b><a href="showimg.php">检查上传图片列表</a></b><br>
<script type="text/javascript">
function selectFile(obj1,obj2){
var filepath = obj1.value;
if(filepath.lastIndexOf("\\")>0){
filename= filepath.substring(filepath.lastIndexOf("\\")+1,filepath.length);
}
obj2.value = filename;//用来失掉文件名;
}
var re;
var tempimg=new Image();//构建一个image对象,用光降时存取上传的图片信息
function perImg(o)
{//o是阅读上传的值;
isOpare=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1)?true:false;
if(isOpare && o.indexOf("http://")==-1){document.getElementById("perDiv").innerHTML="Opera 阅读器失掉不当地途径,所以没法供应预览后果,感谢!";return;}
//tempimg.src="http://www.pushad.com/XrssFile/2007-2/6/20072612928765.gif";
//tempimg.src=o;//return;
//近程会见时阅读当地的图片时由于平安缘由而在firefox下能预览,
//ie下都没有成绩:(,翻开静态页面时也没有成绩;
//可以把在线的图片url拷贝至文件框试一试,拷贝出去的一概无效,(地址为http://的)在其它阅读器下均无效
//而假如是firefox假如是经由过程近程会见,选择图片时没法预览当地的图片
//这可以说是firefox为平安思索的一个方面,也能够说是firefox下的bug
//而关于opera来说,只需是从当地选择的图片(不论是当地仍是近程会见本文件),都得不到全体的途径,所以opera下是没法预览当地图片的
//假如是近程的图片地址,粘贴进文件框里(地址为http://的),就都可以预览图片了。
if(o!=""){
// o=encodeURIComponent(o);
if(o.indexOf("file:///")==-1 && o.indexOf("http://")==-1)o="file:///"+o;
//给url加上file,这类体例在非windows平台能够会有成绩;
o=o.replace(/\\/g,"/");
tempimg.src=o;
//alert(o+"||"+tempimg.width+"||"+tempimg.height);
clearTimeout(re);
re=setTimeout("resize(tempimg)",100);
//设置100毫秒的迟延便可处理ff下失掉前一次size的成绩;
}
}
function resize(o){
//预览时若图片宽或宏伟于200*200,则设定宽或高最大为200*200;
//上传后再用java/php/c等裁剪生成巨细两张图片;
ow=o.width;
oh=o.height;
var ow2=ow,oh2=oh;//失掉宽高
//alert("ow:"+ow+"oh:"+oh+"\now2:"+ow2+"oh2"+oh2)
try{
if(ow>oh){//如严惩于高且严惩于200就减少宽为200,高则按比例缩放
if(ow>200){ow2=200;oh2="auto";}
}else{//如宏伟于宽且宏伟于200就减少高为200,宽则按比例缩放
if(oh>200){oh2=200;ow2="auto";}
}
var showdiv=document.getElementById("divinfo");
var info="原宽:"+ow+" || 原高:"+oh+" == "+"改后宽:"+ow2+" || 改后高:"+oh2;
var getimg="<a href=\""+o.src+"\" onclick=\"window.open(this.href,'','width=500,height=400,top='+(window.screen.height-500)/2+',left='+(window.screen.width-500)/2+',resizable=yes ');return false;\" target=\"_blank\">"
+"<img border=\"0\" id=\"uploadimg\" src=\""+o.src+"\" style=\"width:"+ow2+";height:"+oh2+";\">"
+"</a>";
document.getElementById("perDiv").innerHTML=getimg;
if(showdiv)showdiv.innerHTML=info;
}catch(ex){
alert(ex.toString());
}
}
//jiarry.126.com
//differentiate file type
var right_type=new Array(".gif",".jpg",".jpeg","png","bmp")
function checkImgType(fileURL)
{
//本法式用来验证后缀,假如还有其它格局,可以添加在right_type;
var right_typeLen=right_type.length;
var imgUrl=fileURL.toLowerCase();
var postfixLen=imgUrl.length;
var len4=imgUrl.substring(postfixLen-4,postfixLen);
var len5=imgUrl.substring(postfixLen-5,postfixLen);
for (i=0;i<right_typeLen;i++)
{
if((len4==right_type)||(len5==right_type))
{
return true;
}
}
}
var xlist=0;var errStr="";
function sub(o){
if(o.upload_file.value==""){xlist+=1;errStr+=xlist+")请选择一个图片文件\n";}
if(o.name.value==""){xlist+=1;errStr+=xlist+")请输出称号\n";}
if(o.description.value==""){ xlist+=1; errStr+=xlist+")请输出描写\n";}
if(o.uploader.value==""){xlist+=1; errStr+=xlist+")请输出上传人\n";}
if(errStr!=""){
alert(errStr);
xlist=0;errStr="";
return false;
}
if(checkImgType(o.upload_file.value)){
perImg(o.upload_file.value);
return true;
//alert("选择图片准确,你上传的图片是"+o.upload_file.value);
return false;
}else{
alert("您选择的文件格局不准确!");o.upload_file.focus();
return false;
}
}
</script>
</body>
</html>
<?
/*data*/
$conn=mysql_connect("localhost","root","")or die("毗连掉败!");
mysql_select_db("test",$conn);
/*data*/
$upload_file=$_FILES['upload_file']['tmp_name'];
$upload_file_name=$_FILES['upload_file']['name'];
if($upload_file){
$file_size_max = 1000*1000;// 1M限制文件上传最大容量(bytes)
$store_dir = "upimg/";// 上传文件的贮存地位
$accept_overwrite = 1;//是不是答应掩盖不异文件
// 反省文件巨细
if ($upload_file_size > $file_size_max) {
echo "对不起,你的文件容量大于划定";
exit;
}
// 反省读写文件
if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
Echo "存在不异文件名的文件";
exit;
}
//复制文件到指定目次
if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
echo "复制文件掉败";
exit;
}
}
echo "<p>你上传了文件:";
echo $_FILES['upload_file']['name'];
echo "<br>";
//客户端机械文件的原称号。
Echo "文件的 MIME 类型为:";
echo $_FILES['upload_file']['type'];
//文件的 MIME 类型,需求阅读器供应该信息的撑持,例如“image/gif”。
echo "<br>";
Echo "上传文件巨细:";
echo $_FILES['upload_file']['size'];
//已上传文件的巨细,单元为字节。
echo "<br>";
Echo "文件上传后被一时贮存为:";
echo $_FILES['upload_file']['tmp_name'];
//文件被上传后在办事端贮存的一时文件名。
echo "<br>";
$name=$_FILES['upload_file']['name'];
$path=$_FILES['upload_file']['name'];
$type=$_FILES['upload_file']['type'];
$size=$_FILES['upload_file']['size'];
@ $desc=$_POST['description'];
@ $note=$_POST['uploader'];
@ $name=$_POST['name'];
/*insert database*/
if(!empty($name)){
$inserSql = mysql_query("insert into upimg (name,path,type,size,description,note) " .
"values ('$name','$path','$type','$size','$desc','$note')");
//echo "a".$_POST['upload_file']."a";
}else{
//echo "b".$_POST['upload_file']."b";
}
$Erroe=$_FILES['upload_file']['error'];
echo "<font color=red>";
switch($Erroe){
case 0:
Echo "上传胜利";
break;
case 1:
Echo "上传的文件超越了 php.ini 中 upload_max_filesize 选项限制的值."; break;
case 2:
Echo "上传文件的巨细超越了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; break;
case 3:
Echo "文件只要局部被上传";break;
case 4:
Echo "没有文件被上传";break;
}
echo "</font>";
mysql_close($conn) or die("没法与办事器断开毗连!");
?>
本例下载地址(假如当地址非团体主机,不包管每次都能翻开或临时无效)
http://lslnx.zsu.edu.cn/webspace/78229/personel_web/jiarry/resources/previewImg.html
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。 做为1门年轻的语言,php一直很努力。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 兴趣是最好的老师,百度是最好的词典。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
页:
[1]