方法1、FormData简单实现

后端:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace Mao.Common
{
public enum UploadFileType
{
Video,
Image
} public class FileUploadHelper
{
#region Fields private bool m_statu;
private string m_msg;
private string m_filename; #endregion #region 构造方法 /// <summary>
/// 初始化
/// </summary>
public FileUploadHelper()
{
m_statu = false;
m_msg = "";
m_filename = ""; } #endregion #region 公开属性 /// <summary>
/// 处理结果
/// </summary>
public bool Statu
{
get { return m_statu; }
}
public string Msg
{
get { return m_msg; }
} public string FileName
{
get { return m_filename; }
} #endregion /// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <param name="path">Server.MapPath转换后的路径</param>
/// <returns></returns>
public void SaveFile(HttpPostedFileBase file, string path)
{
if (file != null && file.ContentLength > )
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string ext1 = Path.GetExtension(file.FileName); //格式判断
if (ext1 != ".gif" && ext1 != ".jpg" && ext1 != ".jpeg" && ext1 != ".png" && ext1 != ".mp4")
{
m_statu = false;
m_msg = "文件格式不正确!"; }
else
{
string name = DateTime.Now.ToString("yyyyMMddHHmmssff");
string ext = Path.GetExtension(file.FileName);
string downpath = path + name + ext;
string filepath = path + name + ext;
file.SaveAs(filepath);
m_statu = true;
m_msg = "上传成功!";
m_filename = name + ext;
}
}
else
{
m_statu = false;
m_msg = "未接收到文件!"; } }
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <param name="type">限定文件类型</param>
/// <param name="path"></param>
public void SaveFile(HttpPostedFileBase file, UploadFileType type, string path)
{
string ext1 = Path.GetExtension(file.FileName); switch (type)
{
case UploadFileType.Image:
if (ext1 != ".gif" && ext1 != ".jpg" && ext1 != ".jpeg" && ext1 != ".png")
{
m_statu = false;
m_msg = "上传失败!文件格式不正确!"; }
else
{
m_statu = true;
m_msg = "上传成功!";
}
break;
case UploadFileType.Video:
if (ext1 != ".mp4")
{
m_statu = false;
m_msg = "上传失败!文件格式不正确!"; }
else
{
m_statu = true;
m_msg = "上传成功!";
}
break;
default:
m_statu = false;
m_msg = "上传失败!未知文件格式!";
break; } if (m_statu)
{
this.SaveFile(file, path); } } } }

类库Sample

public ActionResult Upload(HttpPostedFileBase file, string type)
{
string path = null;
UploadFileType fileType;
if (string.Equals(type.ToLower(), "video", StringComparison.OrdinalIgnoreCase))
{
fileType = UploadFileType.Video;
path = ConfigurationManager.AppSettings.Get("VideoUploadPath"); }
else
{
fileType = UploadFileType.Image;
path = ConfigurationManager.AppSettings.Get("ImagesUploadPath");
} FileUploadHelper filehelper = new FileUploadHelper(); filehelper.SaveFile(file, fileType, Server.MapPath(path));
return Json(new { statu = filehelper.Statu, msg = filehelper.Msg, filename = filehelper.FileName }); }

Controller

前端:

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data", id = "uploadForm" }))
{
<input type="file" style="height: 34px;" name="file" accept="image/png, image/jpeg, image/gif, image/jpg" />
<input type="hidden" name="type" value="image" /> } …… function doUpload() {
var formData = new FormData($("#uploadForm")[]);
if (!$("input[type=file]").val()) {return;}
$.ajax({
url: '/upload/upload',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
if (!returndata.statu) {
alert(returndata.msg);
} else {
$("#ImagePath").val(returndata.filename);
}
},
error: function (returndata) {
alert(returndata);
}
});
}

方法2、

.NET拾忆:FormData文件上传的更多相关文章

  1. axios+FormData文件上传

    axios+FormData文件上传 原理:FormData上传 创建一个FormData对象,将得到的文件流对象放在FormData内,然后使用axios上传 注意: 1.请求头设置 headers ...

  2. requests接口自动化7-Multi/form-data文件上传形式的post请求:files

    Multi/form-data文件上传形式的post请求:用files传参 fiddler里请求响应内容; 代码: import requests from requests_toolbelt imp ...

  3. multipart/form-data 文件上传表单中 传递参数无法获取的原因!

    1.什么是multipart/form-data 首先我们需要明白在html中的enctype属性, enctype:规定了form表单在发送到服务器时候编码方式.他有如下的三个值. ①applica ...

  4. Content-Type: multipart/form-data;文件上传利用

    当我们找到一个文件上传接口时,发现他的MIME类型检测为Content-Type: multipart/form-data;时,我们就可以尝试下面几种方法来绕过限制. ---------------- ...

  5. angular form-data文件上传

    前言:很久没更新博客,最近公司pc端技术选型用angular,这几天就赶鸭子上架,硬着头皮直接上手angular.其中有许多小坑陆陆续续踩起走.今天就遇到一个比较常见的问题:图片上传. 主题:图片上传 ...

  6. multipart/form-data文件上传

    form表单的enctype属性:规定了form表单数据在发送到服务器时候的编码方式 application/x-www-form-urlencoded:默认编码方式 multipart/form-d ...

  7. ajax 'Content-Type': 'multipart/form-data' ->文件上传

    'Content-Type': 'multipart/form-data' :指定传输数据为二进制数据,例如图片.mp3.文件

  8. jquery基于form-data文件上传

    1.html代码 <input type="file" name="myupdate" id="myupdate"> 2.jav ...

  9. 构建multipart/form-data实现文件上传

    构建multipart/form-data实现文件上传 通常文件上传都是通过form表单中的file控件,并将form中的content-type设置为multipart/form-data.现在我们 ...

随机推荐

  1. deepin中idea中文乱码解决

    打开终端 命令: sudo su 输入密码: aptitude search uming 显示: root@terwer-PC:/home/terwer# aptitude search uming ...

  2. [性能优化] perf

    运行时性能分析工具 wiki:https://en.wikipedia.org/wiki/Perf_(Linux) linux wiki:https://perf.wiki.kernel.org/in ...

  3. 【转】escape()、encodeURI()、encodeURIComponent()区别详解

    escape().encodeURI().encodeURIComponent()区别详解 原文链接:http://www.cnblogs.com/tylerdonet/p/3483836.html ...

  4. 【PyQt5-Qt Designer】文本框读写操作

    主要内容: 1.读.写 输入控件(Input Widgets)中的内容(str) 2.保存数据到txt文件 3.从txt文件中读内容,与输入控件中内容比较 将上述各种输入控件(Input Widget ...

  5. nodejs 学习三 异步和同步

    同步函数 for (let i = 0; i < 10; i ++) { setTimeout(() => { console.log(`${i} ______ ${new Date}`) ...

  6. oracle按照指定列分组合计group by rollup()

    group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...

  7. dispatch_queue_set_specific可重入的gcd

    有时候我们很希望知道当前执行的queue是谁,比如UI操作需要放在main queue中执行.如果可以知道当前工作的queue是谁,就可以很方便的指定一段代码操作在特定的queue中执行.这种做法让G ...

  8. discuz config_global.php文件设置说明

    <?php $_config = array(); // ---------------------------- CONFIG DB ----------------------------- ...

  9. 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放

    一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...

  10. Linksys E 刷Tomato shibby

    前言 一直以来都用Linksys的无线路由器~因为它的稳定~多年来一直用Linksys自身的固件~因为之前没用它做什么特别的应用~所以一直用了下来~它的原厂固件的稳定性也从没让我操过心~近来要为用户提 ...