利用Ajax 怎么把上传的图片路径保存到数据库里面去?

otto_zuo 2013-06-19 12:04:21

public void ProcessRequest(HttpContext context)
{
if (context.Request.Files.Count > 0)
{
HttpPostedFile file = context.Request.Files[0];

if (file.ContentLength > 0 && file.ContentType.IndexOf("image/") >= 0)
{
int width = Convert.ToInt32(context.Request.Form["width"]);
int height = Convert.ToInt32(context.Request.Form["height"]);

string path = "data:image/jpeg;base64," + Convert.ToBase64String(ResizeImg(file.InputStream, width, height).GetBuffer());

context.Response.Write(path);
}
}
}


public MemoryStream ResizeImg(Stream ImgFile, int maxWidth, int maxHeight)
{
Image imgPhoto = Image.FromStream(ImgFile);

decimal desiredRatio = Math.Min((decimal)maxWidth / imgPhoto.Width, (decimal)maxHeight / imgPhoto.Height);
int iWidth = (int)(imgPhoto.Width * desiredRatio);
int iHeight = (int)(imgPhoto.Height * desiredRatio);

Bitmap bmPhoto = new Bitmap(iWidth, iHeight);

Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.DrawImage(imgPhoto, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(0, 0, imgPhoto.Width, imgPhoto.Height), GraphicsUnit.Pixel);

MemoryStream ms = new MemoryStream();
bmPhoto.Save(ms, ImageFormat.Jpeg);

imgPhoto.Dispose();
gbmPhoto.Dispose();
bmPhoto.Dispose();

return ms;
}


我这个是MVC3.0里..最好大神能用MVC结构解答一下...
在线等~~~
...全文
744 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏格拉低 2013-07-08
  • 打赏
  • 举报
回复
利用Ajax把图片路径保存到数据库中? 这句话就多此一举啊。
你如果单单保存图片路径,何必用Ajax呢? 一个保存就OK了啊
如果用Ajax进行图片上传,就是在界面上需要局部的刷新,是这样的:
思路:首先通过Ajax进入后台,在通过后台处理:比如1(带汉字的图片如何存路径),2(一般路径要存放到服务器上,我是在服务器跟路径建个update文件夹),这时候点击上传,路径会回到前台然后进行页面局部刷新(显示"图片上传成功几个字")然后你一定有一个添加的按钮去执行添加方法,点击按钮时候,在通过js获取到当前回传的图片路径,在讲value值换成回传的路径,去执行添加方法。结束 需要注意的是:需要判断上传的图片类型:
小丑哥_V5 2013-06-20
  • 打赏
  • 举报
回复
可以使用uploadify这个插件吧,还是挺强大的,你可以百度下这个插件,很多资料提供
Go 旅城通票 2013-06-19
  • 打赏
  • 举报
回复
客户端预览可以不通过服务器,直接加载客户端图片信息就行,参考这个:javascript客户端图片预览,兼容最新firefox,chrome和IE

无刷新上传参考3#的。提交到隐藏的iframe就和普通的form表单提交一样就行,主要是获取返回结果有点不一样,给iframe添加onload事件然后获取iframe里面的内容即可。
otto_zuo 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
一般提交表单到隐藏iframe中或者用flash来实现上传,ajax上传不兼容ie浏览器,因为要使用ajax上传时需要使用formdata对象 直接存文件到硬盘,存储文件名称就行了吧,干嘛要将图片序列化为base64,部分ie浏览器不支持base64格式的src设置的。。而且序列化成base64花的时间多,存内容到数据库也会导致数据库剧增吧。。 一定更要存储为base64,将context.Response.Write(path)替换为数据库操作就行了,和mvc没什么关系吧。
context.Response.Write(path) 我这个要是改成数据库操作的话,就预览不到图片了..没有返回视图里了..
Go 旅城通票 2013-06-19
  • 打赏
  • 举报
回复
otto_zuo 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
一般提交表单到隐藏iframe中或者用flash来实现上传,ajax上传不兼容ie浏览器,因为要使用ajax上传时需要使用formdata对象 直接存文件到硬盘,存储文件名称就行了吧,干嘛要将图片序列化为base64,部分ie浏览器不支持base64格式的src设置的。。而且序列化成base64花的时间多,存内容到数据库也会导致数据库剧增吧。。 一定更要存储为base64,将context.Response.Write(path)替换为数据库操作就行了,和mvc没什么关系吧。
不懂,能写个实例看看吗 ..拜托了
Go 旅城通票 2013-06-19
  • 打赏
  • 举报
回复
一般提交表单到隐藏iframe中或者用flash来实现上传,ajax上传不兼容ie浏览器,因为要使用ajax上传时需要使用formdata对象 直接存文件到硬盘,存储文件名称就行了吧,干嘛要将图片序列化为base64,部分ie浏览器不支持base64格式的src设置的。。而且序列化成base64花的时间多,存内容到数据库也会导致数据库剧增吧。。 一定更要存储为base64,将context.Response.Write(path)替换为数据库操作就行了,和mvc没什么关系吧。

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧