由于前段时间的项目中 涉及到图纸的上传 前端大神很随意的扔给我一个页面 让我自己修修改改 找了好几个素材站都没有找到合适的上传插件 最后不得已 用formdata 写了一个 顺便记录下吧

html 代码

<li>
<label class="left">上传产品图片:</label>
<div class="formlisttext" id="feedback">
  <a onClick="getElementById('inputfile').click()" class="addpic"><b>+</b><br />添加图片</a>
  <input type="file" onchange=checkImgExt(this.value) multiple="multiple" name="image" id="inputfile" style="height:0;width:0;z-index: -1; position: absolute;left: 10px;top: 5px;"/>
  <small class="long">支持jpeg、jpg、gif、png等图片格式,单张图片最大不超过8M。</small>
   </div>
</li>

js 代码

$("#inputfile").change(function(){
//创建FormData对象
var data = new FormData();
//为FormData对象添加数据
$.each($('#inputfile')[0].files, function(i, file) {
data.append('upload_file'+i, file);
}); //发送数据
$.ajax({
url:'url', //地址自己写啊
type:'POST',
data:data,
cache: false,
contentType: false, //不可缺参数
processData: false, //不可缺参数
success:function(data){ data = $(data).html(); //第一个feedback数据直接append,其他的用before第1个( .eq(0).before() )放至最前面。
//data.replace(/&lt;/g,'<').replace(/&gt;/g,'>') 转换html标签,否则图片无法显示。
if($("#feedback").children('img').length == 0)
$("#feedback").prepend(data.replace(/&lt;/g,'<').replace(/&gt;/g,'>'));
else
$("#feedback").children('img').eq(0).before(data.replace(/&lt;/g,'<').replace(/&gt;/g,'>'));
$(".loading").hide(); //加载成功移除加载图片
},
error:function(err){
// alert('上传出错');
// $(".loading").show(); //加载失败移除加载图片
}
});
});

php 代码

 function img(){
$db = $GLOBALS['db'];
$ecs = $GLOBALS['ecs']; $dir_base = DATA_DIR . '/product_img/' . date('Ymd') . '/';
if (!file_exists($dir_base)) {
if (!@mkdir($dir_base, 0755,true)) {
return false;
}
}
//没有成功上传文件,报错并退出。
if(empty($_FILES)) {
echo "<textarea><img src='{$dir_base}error.jpg'/></textarea>";
exit(0);
} $output = "<textarea>";
$index = 0; //$_FILES 以文件name为数组下标,不适用foreach($_FILES as $index=>$file)
foreach($_FILES as $file){
$upload_file_name = 'upload_file' . $index; //对应index.html FomData中的文件命名
$fix = substr(strrchr($_FILES[$upload_file_name]['name'], '.'), 1);
$filename = base64_encode("product_img_62_48".date('YmdHis')."_".rand(1000,9999)).".".$fix;
$gb_filename = iconv('utf-8','gb2312',$filename); //名字转换成gb2312处理
//文件不存在才上传
if(!file_exists($dir_base.$gb_filename)) {
$isMoved = false; //默认
$MAXIMUM_FILESIZE = 8 * 1024 * 1024; //文件大小限制 8M = 8 * 1024 * 1024 B;
$rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i"; //取文件后缀 if ($_FILES[$upload_file_name]['size'] <= $MAXIMUM_FILESIZE && preg_match($rEFileTypes, strrchr($gb_filename, '.'))) {
$isMoved = @move_uploaded_file ( $_FILES[$upload_file_name]['tmp_name'], $dir_base.$gb_filename); //上传文件
}
}else{
$isMoved = true; //已存在文件设置为上传成功
}
if($isMoved){
$sql = 'INSERT INTO'.$ecs->table('goods_img').'(`img_path`) VALUES '."('$dir_base$filename')";
$db->query($sql);
$img_id = $db->insert_id();
//输出图片文件<img>标签
//注:在一些系统src可能需要urlencode处理,发现图片无法显示,
// 请尝试 urlencode($gb_filename) 或 urlencode($filename),不行请查看HTML中显示的src并酌情解决。
$output .= "<div class='thumblist' id='imageDelete{$img_id}' >";
$output .= "<div class='thumboperate'>";
// $output .= "<a href='' class='replace'></a>";
$output .= "<a href='' onclick='imgdelete({$img_id});return false;' class='delete'></a>";
$output .= "</div>";
$output .= "<input type='hidden' name='imagepath[]' value='{$img_id}'>";
$output .= "<img src='{$dir_base}{$filename}' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>";
$output .= "</div>";
}else {
$output .= "<div class='thumblist' >";
$output .= "<div class='thumboperate'>";
// $output .= "<a href='' class='replace'></a>";
$output .= "<a href='' class='delete'></a>";
$output .= "</div>";
$output .= "<input type='hidden' name='imagepath[]' value='{$dir_base}{$filename}'>";
$output .= "<img src='{$dir_base}error.jpg' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>";
$output .= "</div>";
} $index++;
} echo $output."</textarea>";
}

由于本人比较懒,细节方面就不调了

验证方法附上

 function checkImgExt(filename)
{
var flag = false; //状态 "jpg","png","jpeg","gif"
var arr = ["jpg","png","jpeg","gif"];
//取出上传文件的扩展名
var index = filename.lastIndexOf(".");
var ext = filename.substr(index+1).toLowerCase( );
//循环比较
for(var i=0;i<arr.length;i++)
{
if(ext == arr[i])
{
flag = true; //一旦找到合适的,立即退出循环
break;
}
}
//条件判断
if(!flag)
{
alert('你上传的图片类型不正确');
// $("#Model").val('');
return false;
}
};

FormData自定义上传图片的更多相关文章

  1. css3自定义上传图片输入框的方法

    css3自定义上传图片输入框的方法 代码如下<pre> <form class="form1"> <img src="/kelatoupia ...

  2. 编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里

    application/x-www-form-urlencoded与 multipart/form-data: Fom表单中如果没有type=file的控件,用默认的application/x-www ...

  3. Element 以二进制的形式 自定义上传图片

    一,只有在上传文件之前的钩子函数中才可以获得最初的文件(文件本身的二进制形式),用以以上传服务器. 还需要使用formdata来承载数据,便于接收 <template>   <div ...

  4. html 自定义上传图片样式,并回显

    <div id="photoUpLoad"> <input type="file" id="photo" name=&qu ...

  5. 百度富文本编辑器UEditor自定义上传图片接口

    如下图:  然后修改ueditor.all.js   

  6. 使用H5 formData对象上传图片和视频的文件时,必填的属性

    async : false,cache : false,contentType : false,// 告诉jQuery不要去设置Content-Type请求头processData : false,/ ...

  7. vue结合element实现自定义上传图片、文件

    参考了很多文献,感谢各位帖子,所以也想把自己遇到不会的东西分享出来,菜鸟一枚大家一进步!

  8. CKEditor5 + vue2.0 自定义图片上传、highlight、字体等用法

    因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEdit ...

  9. 基于layui+cropper.js实现上传图片的裁剪功能

    最近因项目需求,需要在上传图片的时候先对图片裁剪,然后在上传,所以就有了本文的出现. 开始正文之前,要提一下这个图片的裁剪:图片的裁剪,有前端裁剪,也可以后端裁剪 前端的裁剪我知道的可以分为这么两种: ...

随机推荐

  1. sqlmap命令

    -u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p "page,id") -D "& ...

  2. Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)

    关于音视频通话过程中最小化成悬浮框这个功能的实现,网络上类似的文章很多,但是好像还没看到解释的较为清晰的,这里因为项目需要实现了这样的一个功能,今天我把它记录下来,一方面为了以后用到便于自己查阅,一方 ...

  3. P1132 数字生成游戏

    题目请见:传送门 以下为题解,直接从洛谷上搬过来的,还专门改了markdown,(汗) 宽搜 with 一些技巧 由于查询量很大,所以要预先处理所有答案 预处理当然是用BFS,并同时进行delete, ...

  4. 计算生日是星期几-soj

    编写一个程序,只要输入年月日,就能回答那天是星期几. 输入一个日期,包括年.月.日.(一组测试数据) 输出这个日期是星期几. 输入: 1 1 1 2 1 1 2006 7 10 输出: Monday ...

  5. 35.Linux-分析并制作环形缓冲区

    在上章34.Linux-printk分析.使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里, 可以通过dmesg命令来查看log_buf[] 1 ...

  6. python使用rsa库做公钥解密(网上别处找不到)

    使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_tex ...

  7. 解决zabbix中文显示乱码问题

    中文显示问题,图表乱码 解决办法: [root@zabbix ~]# cd /usr/share/zabbix/include/ [root@zabbix include]# vim locales. ...

  8. S2b只适合于电商吗?

    万物互联时代,任何产业蓬勃发展都离不开互联网,从B2M.B2B.B2C.C2C.M2M,层出不穷的商业模式都让人眼花缭乱,最近还推出了s2b这个全新的模式. S代表着大的供应平台,它将更好地赋能给更多 ...

  9. JSON数据解析及gson.jar包

    从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...

  10. 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)

    题目描述  请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵 ...