当前位置: 首页 > news >正文

php ajax实现图片预览,ajax怎么实现图片的预览上传以及查看缩略图

这次给大家带来ajax怎么实现图片的预览上传以及查看缩略图,ajax实现图片的预览上传以及查看缩略图的注意事项有哪些,下面就是实战案例,一起来看一下。

要实现功能,上传图片时可以预览,因还有别的文字,所以并不只上传图片,实现与别的文字一起保存,当然上来先上传图片,然后把路径和别的文字一起写入数据库;同时为 图片生成缩略图,现只写上传图片方法,文字在ajax里直接传参数就可以了,若要上传多图,修改一下就可以了。

借鉴了网上资料,自己写了一下,并不需要再新加页面,只在一个页面里就OK啦。

JS代码://ajax保存数据,后台方法里实现此方法

function SaveData() {

filename = document.getElementById("idFile").value;

result =test_test_aspx.SaveData(filename).value;

if (result) {

alert("保存成功!");

}

return false;

}

//实现预览功能

function DrawImage(ImgD) {

var preW = 118;

var preH = 118;

var image = new Image();

image.src = ImgD.src;

if (image.width > 0 && image.height > 0) {

flag = true;

if (image.width / image.height >= preW/ preH) {

if (image.width > preW) {

ImgD.width = preW;

ImgD.height = (image.height * preW) / image.width;

}

else {

ImgD.width = image.width;

ImgD.height = image.height;

}

ImgD.alt = image.width + "x" + image.height;

}

else {

if (image.height > preH) {

ImgD.height = preH;

ImgD.width = (image.width * preH) / image.height;

}

else {

ImgD.width = image.width;

ImgD.height = image.height;

}

ImgD.alt = image.width + "x" + image.height;

}

}

}

//当idFile内容改变时

function FileChange(Value) {

flag = false;

document.getElementById("showImg").style.display = "none";

document.getElementById("idImg").width = 10;

document.getElementById("idImg").height = 10;

document.getElementById("idImg").alt = "";

document.getElementById("idImg").src = Value;

}

以下为前台代码:

图片:

预览:

//实现预览

//加这个主要是为了实现查看时显示图片,因为上面的(idImg)加上runat="server" 报错,如有好的方法可以留言

以下为AJAX方法:[Ajax.AjaxMethod()]

public bool SaveData(string fileNamePath)

{

string serverFileName = "";

string sThumbFile = "";

string sSavePath = "~/Files/";

int intThumbWidth = 118;

int intThumbHeight = 118;

string sThumbExtension = "thumb_";

try

{

//获取要保存的文件信息

FileInfo file = new FileInfo(fileNamePath);

//获得文件扩展名

string fileNameExt = file.Extension;

//验证合法的文件

if (CheckFileExt(fileNameExt))

{

//生成将要保存的随机文件名

string fileName = GetFileName() + fileNameExt;

//检查保存的路径 是否有/结尾

if (sSavePath.EndsWith("/") == false) sSavePath = sSavePath + "/";

//按日期归类保存

string datePath = DateTime.Now.ToString("yyyyMM") + "/" + DateTime.Now.ToString("dd") + "/";

if (true)

{

sSavePath += datePath;

}

//获得要保存的文件路径

serverFileName = sSavePath + fileName;

//物理完整路径

string toFileFullPath = HttpContext.Current.Server.MapPath(sSavePath);

//检查是否有该路径 没有就创建

if (!Directory.Exists(toFileFullPath))

{

Directory.CreateDirectory(toFileFullPath);

}

//将要保存的完整文件名

string toFile = toFileFullPath + fileName;

///创建WebClient实例

WebClient myWebClient = new WebClient();

//设定windows网络安全认证

myWebClient.Credentials = CredentialCache.DefaultCredentials;

//要上传的文件

FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);

//FileStream fs = OpenFile();

BinaryReader r = new BinaryReader(fs);

//使用UploadFile方法可以用下面的格式

//myWebClient.UploadFile(toFile, "PUT",fileNamePath);

byte[] postArray = r.ReadBytes((int)fs.Length);

Stream postStream = myWebClient.OpenWrite(toFile, "PUT");

if (postStream.CanWrite)

{

postStream.Write(postArray, 0, postArray.Length);

}

postStream.Close();

//以上为原图

try

{

//原图加载

using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(serverFileName)))

{

//原图宽度和高度

int width = sourceImage.Width;

int height = sourceImage.Height;

int smallWidth;

int smallHeight;

//获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽 和 原图的高/缩略图的高)

if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)

{

smallWidth = intThumbWidth;

smallHeight = intThumbWidth * height / width;

}

else

{

smallWidth = intThumbHeight * width / height;

smallHeight = intThumbHeight;

}

//判断缩略图在当前文件夹下是否同名称文件存在

int file_append = 0;

sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(fileName) + fileNameExt;

while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))

{

file_append++;

sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(fileName) +

file_append.ToString() + fileNameExt;

}

//缩略图保存的绝对路径

string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile;

//新建一个图板,以最小等比例压缩大小绘制原图

using (System.Drawing.Image bitmap = new System.Drawing.Bitmap(smallWidth, smallHeight))

{

//绘制中间图

using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))

{

//高清,平滑

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

g.Clear(Color.Black);

g.DrawImage(

sourceImage,

new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),

new System.Drawing.Rectangle(0, 0, width, height),

System.Drawing.GraphicsUnit.Pixel

);

}

//新建一个图板,以缩略图大小绘制中间图

using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))

{

//绘制缩略图

using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))

{

//高清,平滑

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

g.Clear(Color.Black);

int lwidth = (smallWidth - intThumbWidth) / 2;

int bheight = (smallHeight - intThumbHeight) / 2;

g.DrawImage(bitmap, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth,intThumbHeight, GraphicsUnit.Pixel);

g.Dispose();

bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);

return true;

}

}

}

}

}

catch

{

//出错则删除

System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(serverFileName));

return false;

}

}

else

{

return false;

}

}

catch (Exception e)

{

return false;

}

}

///

/// 检查是否为合法的上传文件

///

///

///

private bool CheckFileExt(string _fileExt)

{

string[] allowExt = new string[] { ".gif", ".jpg", ".jpeg" };

for (int i = 0; i < allowExt.Length; i++)

{

if (allowExt[i] == _fileExt) { return true; }

}

return false;

}

//生成随机数文件名

public static string GetFileName()

{

Random rd = new Random();

StringBuilder serial = new StringBuilder();

serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));

serial.Append(rd.Next(0, 999999).ToString());

return serial.ToString();

}

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

相关文章:

  • php ajax筛选,ajax商品筛选功能怎么进行判断
  • php curl_init 报错,如何解决curl_init php报错问题
  • php ?page,google chrome浏览器下载 PHP通用分页类pagephp[仿google分页]
  • php curl ssl错误,php curl常见错误:SSL错误、bool(false)
  • win2008系统php伪静态,ZBlog PHP在WIN2008 64位系统不能伪静态的解决方法
  • 常用PHP命令,PHP 常用命令行
  • python爬虫怎么自动下载图片,【图文详解】python爬虫实战——5分钟做个图片自动下载器...
  • 立方体相册代码php,3D相册制作代码
  • oracle问题如何解决方案,oracle问题解决方案汇总
  • oracle+dbca+创建失败,oracle dbca启动图形不成功的处理方法
  • oracle 只读方式打开文件,OracleDataGuard_备库以只读或读写方式打开访问
  • oracle导出一半报1046,Oracle 数据库1046事件
  • php级联删除怎么做,如何设置主键和外键,实现级联更新、级联删除
  • linux虚拟机卸载重装,go的卸载与重装(linux系统)
  • linux进程sep19,Linux 系统资源查看:vmstat,dmesg,free,uptime,uname,lsb_release,lsof
  • Cumulo 的 ClojureScript 模块已经成型
  • ES6 学习笔记(一)let,const和解构赋值
  • Java IO学习笔记一
  • java8 Stream Pipelines 浅析
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Javascript基础之Array数组API
  • js正则,这点儿就够用了
  • JS专题之继承
  • miaov-React 最佳入门
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP 7 修改了什么呢 -- 2
  • Vue--数据传输
  • 多线程 start 和 run 方法到底有什么区别?
  • 搞机器学习要哪些技能
  • 开发基于以太坊智能合约的DApp
  • 力扣(LeetCode)965
  • 容器服务kubernetes弹性伸缩高级用法
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 学习Vue.js的五个小例子
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 原生 js 实现移动端 Touch 滑动反弹
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • #Z0458. 树的中心2
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (07)Hive——窗口函数详解
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (ibm)Java 语言的 XPath API
  • (LeetCode C++)盛最多水的容器
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (阿里云万网)-域名注册购买实名流程
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (六)Hibernate的二级缓存
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net CHARTING图表控件下载地址