开发工具与关键技术: VisualStudio 2015 mvc
作者:杨泽平
撰写时间:2019、6、1
文件上传在mvc项目里也是常见的,要实现文件上传,方法是比较复杂的,而且代码量比较大,方法虽然复杂但要实现这一功能还是得写。
首先视图方法,我们上传需要使用XMLHttpRequest对象,先new一个对象将第一个文件放入对象,然后new一个XMLHttpRequest,XMLHttpRequest的解释如下:
XMLHttpRequest对象提供了对
HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。
XMLHttpRequest可以同步或异步地返回 Web 服务器的响应,并且能够以文本或者一个 DOM 文档的形式返回内容。
上传用post提交方法然后转到控制器方法,控制器方法,
//获取session中的文件表
List
sessionFiles = new List();
if (Session[“sessionFiles”] != null)
{
sessionFiles =
Session[“sessionFiles”] as List;
}
//检查目录是否存在,不存在就创建
if (!Directory.Exists(Server.MapPath("~/Document/Temp/")))
{
Directory.CreateDirectory(Server.MapPath("~/Document/Temp/"));
}
//文件类型
string fileExtension = Path.GetExtension(attachmentFile.FileName);
//不包含文件扩展名的名称
string fileName = Path.GetFileNameWithoutExtension(attachmentFile.FileName);
//原始文件名称
string oldFileName =
attachmentFile.FileName;
//文件名称,添加时间字符串,避免文件名称相同
fileName = fileName + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) +
fileExtension;
//保存文件的路径
string filePath = Server.MapPath("~/Document/Temp/") +
fileName;
//保存文件
attachmentFile.SaveAs(filePath);
然后就是判断文件类型,这个就不说了,接着就是
FilesVo filesVo = new FilesVo
{
FileTypeID = fileTypeId,
FileTypeName = fileTypeName,
FileName
= fileName,
FileGuid
= Guid.NewGuid().ToString(“N”),
Files = "<a
href="/SystemManagement/IssuanceNotice/DownloadAttachment?fileName=" + fileName
-
“”
target="_blank">" + oldFileName + “”};
然后更新session: sessionFiles.Add(filesVo);
Session[“sessionFiles”] = sessionFiles;
最后return返回,这里完成后,我们在返回视图,在视图里注册监听事件,发送成功事件和上传失败事件,还有上传进度,
发送成功事件:
xhr.onload = function (event) {
layer.close(layerIndex);//关闭加载层
var strText
= event.currentTarget.responseText;
if
(strText == “true”) {
//刷新附件列表
tabFiles.reload({
url: "/SystemManagement/IssuanceNotice/SelectSessionFiles",
});
layer.alert("上传成功!", { icon: 1 });
} else {
layer.alert(strText, { icon: 2 });
}
};这里还需要查询上传的附件列表信息,查询就不多说了。
最后效果,点击上传按钮,打开选择文件窗体,双击选择文件上传,然后提示上传成功或失败信息,在点击确定就可以了。
效果如图所示: