附件的上传及保存
附件的上传及保存
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Visual Studio 2015、附件的上传及保存
作者: 梁柏源
撰写时间:2019/5/7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一般在网页上都能下载一些文件以及图片什么的,其实我们下载的是附件;所以今天分享的是如何保存附件信息,提供别人下载。
至于如何上传和保存附件就是今天要分享的题材啦:
上传附件成功后还不行,还要避免上传成功后去掉value 时再次触发上传;而且上传文件一定要用POST方式提交,并且上传图片的大小都不能超过20M,避免无法连续上传相同文件的问题(onchange事件的原因),还要清除掉当前的值
上传附件:
function uploading () {
避免上传成功后去掉value 时再次触发上传:
if ($('#getloading').val() == "" || $('#getloading').val() == undefined) {
return;
}
var files = $('#getloading').prop("files"); //获取选择的文件
if (files.length > 0)
if (files[0].size <= 20 * 1024 * 1024) {
//判断文件大小--文件限制20M,一般图片的大小都不能超过20M。
var fd = new FormData()://new一个FormData对象
fd.append("attachmentFile", files[0]); //将第一个文件放入FormData
var xhr = new XMLHttpRequest();//new一个XMLHttpRequest对象
//注册监听事件,发送成功事件
xhr.onload = function (event) {
layer.close(layerIndex);//关闭加载层
var strText = event.currentTarget.responseText;
if (strText == "true") {
tabFilesRefresh();//刷新附件列表
layer.alert("上传成功!", { icon: 1 });
} else {
layer.alert(strText, { icon: 2 });
}
};
如果上传失败:
xhr.onerror = function (event) {//上传失败事件
layer.close(layerIndex);//关闭加载层
layer.alert("上传失败!", { icon: 2 });
};
//上传进度---会不断被调用
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
console.log(event.total + "--->" + event.loaded + "----->" + (event.loaded / event.total * 100) + "%");
}
};
xhr.open("POST", "/MVC区域/控制器/ uploading (页面)")//上传文件一定要用POST方式提交;
layerIndex = layer.msg('上传中...', { //打开加载层
icon: 16,
time: 0,
shade: 0.3
});
//发送数据
xhr.send(fd);
清除掉目前的值: $('#getloading').val("")
} else {
layer.alert("文件大小不能超过20M", { icon: 0 });
}
} else {
layer.alert("请选择要上的文件", { icon: 0 });
}
}
一般图片在上传之前都是在自家的文件夹里,在供别人下载的时候不可能让别人下载到同样的文件夹里,所以要把图片的路径给替换掉
替换所有图片路径:
Count = Count.Replace("/Document/Temp/", "/Document/Notice/Image/");
myModels.PW_NoticeTable.Add(pwNotice);
然后就获取session中的文件表,检查是否有上传的附件,然后移动附件,再然后就保存
if (myModels.SaveChanges() > 0)
{
int intNoticeId = pwNotice.NoticeID;
保存附件:
获取session中的文件表:
List<Files> sessionFiles = new List<Files>();
if (Session["sessionFiles"] != null)
{
sessionFiles = Session["sessionFiles"] as List<Files>;
}
有上传的附件:if (sessionFiles != null && sessionFiles.Count > 0)
{
List<PW_File> listfFiles = new List<PW_File>();
for (int i = 0; i < sessionFiles.Count; i++)
{
PW_File file = new PW_File();
file.NoticeID = intNoticeId;
file.FileTypeID = sessionFiles[i].FileTypeID;
file.Files = sessionFiles[i].Files;
listfFiles.Add(file);
移动附件:string FileName = sessionFiles[i].FileName;
string OldPath = Server.MapPath("~/Document/Temp/") + FileName;
string NewPath = Server.MapPath("~/Document/Notice/Attachment/") + tFileName;
try
{
System.IO.File.Move(OldPath, NewPath);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
保存:
myModels.PW_File.AddRange(listfFiles);
myModels.SaveChanges();
}
就这样子,上传的附件就保存成功了
来走流程:
.
本来是没有的,空的,现在我要开始上传了
点击添加附件,然后点击要上传的东西上传
看上传成功,而且可以上传相同的文件。
好了,本次分享到此结束。