附件的上传及保存

附件的上传及保存

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术: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();

                        }

就这样子,上传的附件就保存成功了

来走流程:

附件的上传及保存.

本来是没有的,空的,现在我要开始上传了

附件的上传及保存

点击添加附件,然后点击要上传的东西上传

附件的上传及保存

看上传成功,而且可以上传相同的文件。

好了,本次分享到此结束。