今天遇到另外一种上传图片方法

用jquery.fileupload.js

<input type="file" name="file[]" multiple id="fileupload">

一个文件类型的元素

$("#fileupload").fileupload({

datatype:"json",

url: "/File/UploadFiles",
done: function (e, data) { //上传结束的操作

if (data.result[0].result != "OK") //不成功的时候 弹出消息
{
alert(data.result[0].result);
}
else
{
$("#imgshow").attr("src", data.result[0].thumbnail_url); //成功的时候显示图片
}

}

})

上面的url 处理当选择完成图片后进行的上传操作

public string path = "~/Files";

 [HttpPost]
public ActionResult UploadFiles()
{
var r = new List<ViewDataUploadFilesResult>();
foreach (string file in Request.Files)
{
var statuses = new List<ViewDataUploadFilesResult>();
var headers = Request.Headers; if (string.IsNullOrEmpty(headers["X-File-Name"]))
{
UploadWholeFile(Request, statuses);
}
else
{
UploadPartialFile(headers["X-File-Name"], Request, statuses);
} JsonResult result = Json(statuses);
result.ContentType = "text/plain"; return result;
} return Json(r);
}

上面是uploadfiles方法。

ViewDataUploadFilesResult是定义的文件类
  public class ViewDataUploadFilesResult
{
public string name { get; set; }
public int size { get; set; }
public string type { get; set; }
public string url { get; set; }
public string delete_url { get; set; }
public string thumbnail_url { get; set; }
public string delete_type { get; set; } public string result { set; get; }
}

有名字尺寸类型等属性

UploadWholeFile上传整个文件
 private void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
{
for (int i = ; i < request.Files.Count; i++)
{
string result = ISValid(request.Files[i], "image");
if (result!= "OK")
{
statuses.Add(new ViewDataUploadFilesResult() { result=result});
}
}
if (statuses.Count > ) return;
for (int i = ; i < request.Files.Count; i++)
{
var file = request.Files[i]; if (!Directory.Exists(StorageRoot))
{
Directory.CreateDirectory(StorageRoot);
}
string fileExt = Path.GetExtension(file.FileName).ToLower();
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
var fullPath = Path.Combine(StorageRoot, newFileName); file.SaveAs(fullPath); statuses.Add(new ViewDataUploadFilesResult()
{
result = "OK",
name = newFileName,
size = file.ContentLength,
type = file.ContentType,
url = Path.Combine(path, Path.GetFileName(newFileName)),
delete_url = "/Home/Delete/" + newFileName,
thumbnail_url = @"data:image/png;base64," + EncodeFile(fullPath),
delete_type = "GET",
});
}
}
 private void UploadPartialFile(string fileName, HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
{
if (request.Files.Count != ) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request");
var file = request.Files[];
string result = ISValid(file, "image");
if (result != "OK")
{
statuses.Add(new ViewDataUploadFilesResult() { result = result });
}
if (statuses.Count > ) return;
var inputStream = file.InputStream;
if (!Directory.Exists(StorageRoot))
{
Directory.CreateDirectory(StorageRoot);
}
string fileExt = Path.GetExtension(file.FileName).ToLower();
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
var fullName = Path.Combine(StorageRoot, newFileName); using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write))
{
var buffer = new byte[]; var l = inputStream.Read(buffer, , );
while (l > )
{
fs.Write(buffer, , l);
l = inputStream.Read(buffer, , );
}
fs.Flush();
fs.Close();
}
statuses.Add(new ViewDataUploadFilesResult()
{
result="OK",
name = newFileName,
size = file.ContentLength,
type = file.ContentType,
url = Path.Combine(path, Path.GetFileName(newFileName)),
delete_url = "/Home/Delete/" + newFileName,
thumbnail_url = @"data:image/png;base64," + EncodeFile(fullName),
delete_type = "GET",
});
}

上传部分文件

private string ISValid(HttpPostedFileBase file,string dirName)
{
//定义允许上传的文件扩展名
Hashtable extTable = new Hashtable();
extTable.Add("image", "gif,jpg,jpeg,png,bmp");
extTable.Add("flash", "swf,flv");
extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2"); //最大文件大小
int maxSize = ;
String fileName = file.FileName;
String fileExt = Path.GetExtension(fileName).ToLower(); if (file.InputStream == null || file.InputStream.Length > maxSize)
{
return "上传文件大小超过限制。";
} if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring().ToLower()) == -)
{
return "上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。";
}
return "OK";
}

isvalid验证上传文件是否合理

 private string EncodeFile(string fileName)
{
return Convert.ToBase64String(System.IO.File.ReadAllBytes(fileName));
}
 [HttpGet]
public void Delete(string id)
{
var filename = id;
var filePath = Path.Combine(Server.MapPath("~/Files"), filename); if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
}
 

另一种图片上传 jquery.fileupload.js的更多相关文章

  1. 图片上传jQuery插件(兼容IE8)

      图片上传jQuery插件(兼容IE8) 代码来源 :https://github.com/zilan93/uploadImg   html <!DOCTYPE html> <ht ...

  2. MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件

    场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条. 解决:自定义jquery控件 没有解决:非图片上传时,会有浏览样式的问题; 解决方案; 1.样式 – bootstrap 的css和 ...

  3. 图片上传插件用法,JS语法【三】

    注意点: 作为文件域(<input type="file">)必须要有name属性,如果没有name属性,上传之后服务器是获取不到图片的.如:正确的写法是<inp ...

  4. ueditor 百度编辑器图片上传 接 node.js 及一些前端自定义

    百度编辑器 用node.js 做服务端 demo 大神已整理的 记录一下 以作参考 https://github.com/netpi/ueditor 1. 前端图片工具栏上传input file在这里 ...

  5. 文件上传-jquery.uploadify.js

    <script type="text/javascript" src="../jquery_uploadify/jquery.uploadify-3.1.min.j ...

  6. 图片上传预览js

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片

    摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...

  8. .net mvc + layui做图片上传(一)

    图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块.关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折.因为缺乏经验,对几种图片上传的 ...

  9. 图片上传即时显示javascript代码

    这是基于javascript的一种图片上传即时显示方法,测试结果IE6和火狐浏览器可以正常使用.google浏览器不兼容. 这种方法兼容性比较差,仅供参考,建议使用ajax方法来即时显示图片. 1.首 ...

随机推荐

  1. 用webdriver+phantomjs实现无浏览器的自动化过程

    环境准备 1. 安装python: 2. 安装pip: 3. 通过pip安装selenium: 4. 下载phantomJS的包并解压缩: 1. 若在Windows系统中,将下载的phantomjs文 ...

  2. 9-this

    第九课 this 一.this基本概念 this是Javascript语言的一个关键字.在JavaScript中,this是动态绑定,或称为运行期绑定的.在不同的情况下,this指向各不相同.但是有一 ...

  3. [问题2014A01] 复旦高等代数 I(14级)每周一题(第三教学周)

    [问题2014A01]  试求下列 \(n\) 阶行列式的值: \[ |A|=\begin{vmatrix} 1 & x_1(x_1-a) & x_1^2(x_1-a) & \ ...

  4. 安装DotNetCore.1.0.0-VS2015Tools.Preview2失败解决方案

    1.把安装文件放入非系统盘 2.命令行带参数运行: DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe SKIP_VSU_CHECK=1 或 DotNetCor ...

  5. consul笔记

    1 webui 默认最新的webui只支持127.0.0.1这种的本机网站的 不支持192.168.1.2 启用192.168.1.2的支持 命令加 -client 192.168.2.156 感谢赵 ...

  6. mac系统mysql配置环境变量(转)

    mac初次安装mysql,输入mysql -u root -p会出现:zsh: command not found: mysql的提示.此时需要配置环境变量. mac版mysql客户端:mysql-5 ...

  7. switch多分支语句简析

    在编程中一个常见问题就是检测一个变量是否符合某个条件,switch以一个简单明了的方式来实现类似于"多选一"的选择,语法格式如下: /*switch首先计算表达式的值,如果表达式的 ...

  8. [SoapUI] 同一个Resource不同参数时,在两个step里默认打开总是同一个Resource

    当SoapUI里Projects 有两个相同的Resource,只是参数不同时,使用两个Resource创建的step默认打开的总是同一个Resource.我们应当修改method名字为不同,这是So ...

  9. JavaScipt的秘密花园

    对象使用和属性 JavaScript 中所有变量都可以当作对象使用,除了两个例外 null 和undefined. false.toString(); // 'false'[1, 2, 3].toSt ...

  10. ROS实际问题解决方法

    1.建立软链接 在路径cd /etc/udev/rules.d中,建立例如50-rfid.rules的文件,它会根据文件名之前的50 51等判断优先级,50的优先级就大于51 如:  KERNEL== ...