ASP.NET MVC上传图片的奇怪问题
本文来源于博客园,转载请注明出处
表现:客户说就华为的手机有问题,而且是在QQ里打开有问题,如果在手机的浏览器上,则可以正常上传图片。
有问题的代码如下:
private ResultModel SaveImg(HttpPostedFileBase file)
{
var ret = new ResultModel() { IsSucc=false,Message="未知错误"};
try
{
//基本格式判断
string oExtName = Path.GetExtension(file.FileName).ToLower();
if (!ImgDict.ContainsValue(oExtName))
{
ret.IsSucc = false;
ret.Message = "图片格式不支持";
return ret;
}
//图片大小限制
if (file.ContentLength > (maxSize * 1024 * 1024))
{
ret.IsSucc=false;
ret.Message = "图片大小不能超过" + maxSize + "M";
return ret;
}
//基于图片内容的格式判断
ImageFormat f = null;
using (var img = Image.FromStream(file.InputStream))
{
if (!ImgDict.ContainsKey(img.RawFormat))
{
ret.IsSucc = false;
ret.Message = "图片格式不支持";
return ret;
}
else
{
f = img.RawFormat;
}
}
//保存
string newName = MakeNewName(ImgDict[f]);
file.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/upload/" + newName));
}
catch (Exception e)
{
LogHelper.Err(e);
ret.IsSucc = false;
ret.Message = e.Message;
}
return ret;
}
private static Dictionary<ImageFormat, string> ImgDict = new Dictionary<ImageFormat, string>() {
{ImageFormat.Gif,".gif"},
{ImageFormat.Jpeg,".jpg"},
{ImageFormat.Png,".png"},
{ImageFormat.Bmp,".bmp"}
};
在“基本格式判断”里,有问题的代码没有对oExtName是否为空作判断,而华为手机通过qq打开链接上传图片,传递过来的图片名称是image%3A98192,其中image%3A经过Url解码后是image:,不同的照片后边的数字会不同,
获取扩展名发现也是空的,这就导致客户总是通不过“基本格式判断”。
“基本格式判断”里的if应该作如下修改:
if (!string.IsNullOrEmpty(oExtName) && !ImgDict.ContainsValue(oExtName))
至于为何发生这种情况,Google之后无果,百度搜索之后也没有得到什么实质性信息,朋友们如果有知道其中原因的,望不吝赐教:

本文来源于博客园,转载请注明出处
ASP.NET MVC上传图片的奇怪问题的更多相关文章
- Asp.Net MVC 上传图片到数据库
[读书笔记]Asp.Net MVC 上传图片到数据库(会的绕行) 之前上传图片的做法都是上传到服务器上的文件夹中,再将url保存到数据库.其实在MVC中将图片上传到数据库很便捷的事情,而且不用去存 ...
- 【读书笔记】Asp.Net MVC 上传图片到数据库(会的绕行)
之前上传图片的做法都是上传到服务器上的文件夹中,再将url保存到数据库.其实在MVC中将图片上传到数据库很便捷的事情,而且不用去存url了.而且这种方式支持ie6(ie6不支持jquery自动提交fo ...
- Asp.Net MVC上传图片
mvc上传图片 [HttpPost] public JsonResult Upload() { ) { ) { HttpPostedFileBase file = Request.Files[]; ) ...
- asp.net mvc上传图片案例
1.放在ajax.BeginForm里,不好使,同asp.net 表单中 fileupload控件不支持ajax差不多吧,如果异步的话可以借助jquery.form.js,很方便 2. //上传文件 ...
- asp.net MVC上传图片完整方法
图片上传 自动创建文件夹并重命名(带缩略图) 后台: [HttpPost] public ActionResult WanSell_UploadPicture(ProductGalleryModels ...
- asp.net mvc 上传图片 摘自mvc 高级编程第311页
Image Uploads I am going to complete the SportsStore user experience with something a little more so ...
- asp.net mvc 上传图片流存服务器
foreach (var file in Request.Files) { ]); using (FileStream fs = new FileStream(pathSrc, FileMode.Cr ...
- ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)
AjaxFileUpload 插件是一个很简洁很好用的上传文件的插件,可以实现异步上传功能,但是在 ASP.NET MVC中使用时,会出现上传图片后不能正确的显示的问题,经过仔细排查,终于找到原因,解 ...
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
EF+LINQ事物处理 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...
随机推荐
- Appium安卓真机环境搭建
说明 步骤可能比较简洁,因为手头上有安卓测试机,所以需要配置虚拟机的童鞋请去虫师博客园,因为我也是从那儿学的,哈哈.点我飞到虫师那儿 但是如果你要搭建真机测试环境的话,本教程将是最简单实用的. 1. ...
- Ubuntu版本更替所引发的“血案”
Ubuntu版本更替所引发的"血案" 今天,我兴致很高的装了双系统,并且配置了Linux的网络,接下来就是安装一些软件,来实现我想达到的功能了,结果被一个小小的命令卡的 ...
- TCP协议—三次握手四次挥手的原理<转>
三次握手四次挥手的原理 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...
- 5.1 TLP的格式
当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去.TLP的基本格式如图5?1所示. 一个完整的TLP ...
- Android常见漏洞
Android常见漏洞 漏洞名称: Log敏感信息泄露 漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露 修改建议: 建议禁止隐私信息的log 漏洞名称: web https校验错误忽略漏洞 漏 ...
- PHP XML简介
php xml文件编程. xml简介 XML作用 1.可以作为程序间通讯的标准(ajax text xml) 2.可以作为配置文件 3.可以作为小型数据库 XML语法 一个xml文件应该包括以下几个内 ...
- ArgumentError:Error #2004:某个参数无效
1.错误描述 ArgumentError:Error #2004:某个参数无效 at flash display::Graphics/drawRect() at ZeroClipboard() 2.错 ...
- 主流nosql数据库对比
目前开源的NOSQL数据库有,Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,Hypertable, Ri ...
- C#构造函数与析构函数--C#基础
1.构造函数 1)构造函数没有返回值,也不能写void,必须是public 修饰符 2)构造函数和类名相同 3)构造函数也是可以重载的 public Clerk(string name,Gender ...
- link-cut-tree 简单介绍
link-cut-tree 简单介绍 前言:这个算法似乎机房全都会,就我不会了TAT...强行搞了很久,勉强照着别人代码抄了一遍qwq 这个本人看论文实在看不懂,太菜了啊!!! 只好直接看如何实现.. ...