view:

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.form.js"></script>
</head>
<body>
<div>
页面上传需要注意以下几点:<br />
1、同一个页面可以有不止一个form但是不能嵌套<br />
2、form:method="post" enctype="multipart/form-data"<br />
3、input:type="file" name="XX" 必须要有name值<br />
</div> <div style="margin-top:20px;">
submit直接提交:提交后刷新页面,直接使用ajax不能把file传到后台处理<br />
<form method="post" action="UpLoadPic" enctype="multipart/form-data">
<input type="file" name="filename" id="filename" accept="image/*" />
<input type="submit" value="提交" />
</form>
</div> <script>
$(function () {
var options = {
success: function (data) {
alert("成功");
}
}; //$("#myform1").ajaxForm(options); $("#myform1").submit(function () {
$(this).ajaxSubmit(options);
return false;
});
});
</script>
<div style="margin-top:20px;">
jQuery.Form.js参照:http://www.cnblogs.com/heyuquan/p/form-plug-async-submit.html <br />
http://www.vaikan.com/docs/jquery.form.plugin/jquery.form.plugin.html <br />
http://www.cnblogs.com/xiaofeixiang/p/3676597.html <br />
每次还会刷新页面
<form id="myform1" method="post" action="UpLoadPic1" enctype="multipart/form-data">
<input type="file" name="filename1" id="filename1" accept="image/*" />
<input id="tijiao1" type="submit" value="提交" />
</form> <div id="outputdiv"></div>
</div> <script src="~/Scripts/ajaxfileupload.js"></script>
<div style="margin-top:20px;">
ajaxfileupload.js参照:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html <br />
<form method="post" action="GetPic" enctype="multipart/form-data">
<input type="file" name="filename2" id="filename2" accept="image/*" />
<input type="button" value="提交" onclick="f2submit();" />
</form>
<script>
function f2submit() {
//文件上传
$.ajaxFileUpload({
url: 'UpLoadPic2',
secureuri: false,
fileElementId: 'filename2',
success: function () {
alert("成功");
},
error: function () {
alert("失败");
},
});
return false;
}
</script>
</div> <script src="~/Scripts/uploadify/jquery.uploadify.min.js"></script>
<div style="margin-top:20px;">
jquery.uploadify.js参照:http://blog.sina.com.cn/s/blog_5079086b0101fkmh.html <br />
局部刷新
<form method="post" enctype="multipart/form-data">
<input type="text" id="FilePathName" readonly="readonly" style="width: 300px;" />
<input type="file" name="filename3" id="filename3" accept="image/*" />
<input type="button" value="提交" onclick="f3submit()" />
</form>
<script>
$(function () {
$('#filename3').uploadify({
//'multi': false,
//'uploadLimit': 100,
auto: false, // 是否直接上传
//width: 64,
//height: 28,
buttonText: "浏览",
'fileSizeLimit': '20MB',
'fileTypeExts': '*.doc;*.docx;*.xlsx;*.pdf;*.ppt;*.pptx;*.xls;*.jpg;*.png;',
swf: '/Scripts/uploadify/uploadify.swf',
//uploader: '/Scripts/uploadify/UploadFile.ashx',
uploader: '/Home/UpLoadPic3',
onSelect: function (file) {
$("#FilePathName").val(file.name);
},
'onSelectError': function (file, errorCode, errorMsg) {
if (errorCode == -110) {
errorMsg = "文件大小不能超过20MB!";
}
else if (errorCode == -100) {
errorMsg = "已经有文件在队列中,请先取消之前的文件!";
}
else if (errorCode == -130) {
errorMsg = "文件格式错误,请选择正确格式的文件!";
}
else {
errorMsg = "未知错误!";
}
alert(errorMsg); return false;
},
onUploadSuccess: function (file) {
alert("成功");
}
});
});
function f3submit() {
$('#filename3').uploadify('upload');
} </script>
</div> <div style="margin-top:20px;">
FormData提交参照:http://www.cnblogs.com/hutuzhu/p/4409292.html <br />
FormData为HTML5对象,只支持新浏览器<br />
<form id="myform4" name="myform4">
<input type="file" name="filename4" id="filename4" accept="image/*" />
<input type="button" value="提交" onclick="f4submit()" />
</form>
<script type="text/javascript">
function f4submit() {
var form = document.getElementById("myform4");
var formData = new FormData(form);
var oReq = new XMLHttpRequest();
oReq.onreadystatechange = function () {
if (oReq.readyState == 4) {
if (oReq.status == 200) {
alert(xhr.responseText);
}
else {
alert("失败");
}
}
}
oReq.open("POST", "UpLoadPic4");
oReq.send(formData);
return false;
}
</script>
</div> <hr />
<a href="/Home/GetFileByContent">根据文件内容下载二进制方式上传的文件</a>
<br />
<a href="/Home/GetFileByPath">根据文件保存路径下载上传的文件</a>
</body>
</html>

controller:

        public static string FilePath = string.Empty;
public static byte[] FileContent; /// <summary>
/// 视图
/// </summary>
/// <returns></returns>
public ActionResult UpFile()
{
return View();
} /// <summary>
/// submit
/// </summary>
[HttpPost]
public void UpLoadPic()
{
SaveFileDirect();
//SaveFileStream();
Response.Redirect("Upfile");
} /// <summary>
/// ajaxSubmit
/// </summary>
[HttpPost]
public void UpLoadPic1()
{
SaveFileDirect();
//SaveFileStream();
Response.Redirect("Upfile");
} /// <summary>
/// ajaxfileupload.js
/// </summary>
[HttpPost]
public void UpLoadPic2()
{
//SaveFileDirect();
SaveFileStream();
} /// <summary>
/// jquery.uploadify.js
/// </summary>
public void UpLoadPic3()
{
//SaveFileDirect();
SaveFileStream();
} /// <summary>
/// FormData
/// </summary>
public void UpLoadPic4()
{
//SaveFileDirect();
SaveFileStream();
} /// <summary>
/// 直接保存上传文件到指定目录
/// </summary>
public void SaveFileDirect()
{
// 获取文件
var upfile = Request.Files[];
// 拼接保存路径
string uppath = Server.MapPath("~/UpFile/") + Path.GetFileName(upfile.FileName);
// 存入指定目录
if (upfile.ContentLength > )
{
upfile.SaveAs(uppath);
} FilePath = uppath;
FileContent = null;
} /// <summary>
/// 通过二进制流保存文件,可以存入数据库
/// </summary>
public void SaveFileStream()
{
// 获取文件
var upfile = Request.Files[];
// 拼接保存路径
string uppath = Server.MapPath("~/UpFile/") + Path.GetFileName(upfile.FileName);
// 读入文件流
byte[] temp = new byte[upfile.InputStream.Length];
upfile.InputStream.Read(temp, , (int)upfile.InputStream.Length);
// 写到指定目录
using (FileStream fs = new FileStream(uppath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
fs.Write(temp, , temp.Length);
}
FilePath = uppath;
FileContent = temp;
} /// <summary>
/// FileContentResult方式下载
/// </summary>
/// <returns></returns>
public FileResult GetFileByContent()
{
List<string> typeList = new List<string>() { ".png", ".jpg", ".jpeg" };
string FileName = Path.GetFileName(FilePath); if (FileContent != null && FileContent.Length > )
{
if (typeList.Contains(Path.GetExtension(FileName)))
{
return File(FileContent, "image/jpg");
}
// 存在fileDownLoad属性的FileResult以附件形式下载,默认会以内联方式打开
return File(FileContent, "application/octet-stream", FileName);
}
return null;
} /// <summary>
/// FilePathResult方式下载
/// </summary>
/// <returns></returns>
public FileResult GetFileByPath()
{
List<string> typeList = new List<string>() { ".png", ".jpg", ".jpeg" };
string FileName = Path.GetFileName(FilePath); if (FileName != null)
{
if (typeList.Contains(Path.GetExtension(FileName)))
{
return File(FilePath, "image/jpg");
}
// 存在fileDownLoad属性的FileResult以附件形式下载,默认会以内联方式打开
return File(FilePath, "application/octet-stream", FileName);
}
return null;
}

asp.net mvc 上传下载文件的几种方式的更多相关文章

  1. 转载-git使用之忽略不需要上传的文件的几种方式

    在我们使用git 的时候通常会遇到一些问题,一些文件我创建了但是我并不想上传或者有些文件我修改了但是并不想上传(为了适应个自己的开发环境),但是在每次git status的时候总能看到它,不仅感到很心 ...

  2. spring mvc上传下载文件

    前端jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  3. ASP.NET MVC 上传大文件时404

    前一段时间会员的上传组件改用FLASH的swfupload来上传,既能很友好的显示上传进度,又能完全满足大文件的上传. 后来服务器升级到windows 2008,改为IIS7后,上传文件一旦超过30M ...

  4. windows和linux之间上传下载文件的两种方法

    一    用rz和sz http://blog.csdn.net/register_man/article/details/53860774 http://www.jb51.net/article/7 ...

  5. .Net mvc 上传多文件

    .net mvc 上传多文件有很多种方式,我的方法只是其中一种, 仅供参考,我主要是注重参数传递的过程,后面文件保存的地方省略.. 调试环境 vs2017 控制器代码: [HttpPost] publ ...

  6. asp.net mvc上传头像加剪裁功能

    原文:asp.net mvc上传头像加剪裁功能 正好项目用到上传+剪裁功能,发上来便于以后使用. 我不能告诉你们其实是从博客园扒的前台代码,哈哈. 前端是jquery+fineuploader+jqu ...

  7. Spring框架学习(8)spring mvc上传下载

    内容源自:spring mvc上传下载 如下示例: 页面: web.xml: <?xml version="1.0" encoding="UTF-8"?& ...

  8. rz和sz上传下载文件工具lrzsz

    ######################### rz和sz上传下载文件工具lrzsz ####################################################### ...

  9. linux上很方便的上传下载文件工具rz和sz

    linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...

随机推荐

  1. WebLogic使用SSH架构部署遇到org.hibernate.hql.internal.ast.HqlTok

    其实这个问题在以前就遇到过,当时解决了,但今天在部署一个测试轻应用的时候一直没有想起来,特此记录一下. 这个问题出现在使用WebLogic(我使用的是10.3.5版本)发布SSH架构的应用.在操作数据 ...

  2. SuperMap iClient

    SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性   SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客 ...

  3. Redis安装介绍

    Redis安装介绍 一.Linux版本及配置 1.  Linux版本:Red Hat Enterprise Linux 6虚拟机 2.  配置: 内存:1G:CPU:1核:硬盘:20G 二.Redis ...

  4. KnockOut文档--模板绑定

    目的 模板绑定使用数据render模板,然后把渲染的结果填充到Dom树中.模板通过重复或嵌套块(通常为您的视图模型数据的函数)用一种简单,方便的方式来建立复杂的UI结构 . 有两种方式使用模板: Na ...

  5. ExtJS初接触 - 在项目中使用ExtJS

    ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...

  6. [置顶] C语言中各种数据类型的长度 sizeof char, short, int, long, long long

    这些数据类型的sizeof具体长度依赖于编译器和操作系统(32-bit or 64-bit) 1: 首先,参见c99标准 标准中没有定义这些数据类型的长度,而是定义了这些数据类型能表达的大小范围的最小 ...

  7. hadoop-1.1.0 rpm + centos 6.3 64虚拟机 + JDK7 搭建分布式集群

    第一步 ,环境准备.  宿主机为CentOS6.3 64位,3个虚拟机为CentOS6.3 64位. (注意:有个技巧,可以先创建一台虚拟机,在其上安装好JDK.hadoop后再克隆两台,这样省时又省 ...

  8. Android中系统设置中的清除数据究竟会清除哪些数据

    今天中的一个story突然提到了系统设置中的清理数据,后来开始思考究竟系统的应用的这个清理功能,究竟会清理那些数据. 于是开始研究,以com.mx.browser为例,思路大概为首先为/data/da ...

  9. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  10. lua读书笔记

    接下来把我所看的<Lua程序设计>中介绍lua的内容,时时的记录下来.当做一个读书笔记吧. 先说一下怎样直接运行lua文件吧,windows cmd进入相应的文件夹,然后输入lua,出现版 ...