.Net上传附件

首先上传保存到临时文件夹,上传代码如下
  /// <summary>
        /// 上传图片 (临时保存)
        /// </summary>
        /// <returns>成功返回图片URL,失败则返回错误信息</returns>
        public AjaxResponse Upload()
        {
            try
            { 
                var content = Request.Content;
                var uploadDir = _appFolders.ImagesFileUpload;
                var tempUploadFiles = "/Upload/TempUploadFiles/";
                var newFileName = "";
                string filePath = "";

                var sp = new MultipartMemoryStreamProvider();
                Task.Run(async () => await Request.Content.ReadAsMultipartAsync(sp)).Wait();

                foreach (var item in sp.Contents)
                {
                    if (item.Headers.ContentDisposition.FileName != null)
                    {
                        var filename = item.Headers.ContentDisposition.FileName.Replace("\"", "");
                        FileInfo file = new FileInfo(filename);
                        string fileTypes = "gif,jpg,jpeg,png,bmp";
                        if (Array.IndexOf(fileTypes.Split(','), file.Extension.Substring(1).ToLower()) == -1)
                        {
                            throw new ApplicationException("不支持上传文件类型");
                        }
                        //if (file.Length> 5242880)
                        //{
                        //    throw new UserFriendlyException(L("FileUpload_Img_SizeLimit"));
                        //}
                        newFileName = "img_" +DateTime.Now.ToString("yyyyMMddhhmmssms") + file.Name ;

                        string newFilePath = DateTime.Now.Year.ToString() + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/";

                        filePath =Path.Combine( _appFolders.TempUploadFileFolder, newFileName);
                        var ms = item.ReadAsStreamAsync().Result;
                        using (var br = new BinaryReader(ms))
                        {
                            if (ms.Length > 1048576 * 5)
                            {
                                throw new UserFriendlyException(L("FileUpload_Warn_SizeLimit"));
                            }
                            var data = br.ReadBytes((int)ms.Length);
                            File.WriteAllBytes(filePath, data);
                        }
                    }
                }
                //string pathResul = "{\"errno\": 0,\"data\":[\""+filePath+"\"] }";
                return new AjaxResponse(newFileName);
            }
            catch (UserFriendlyException ex)
            {
                return new AjaxResponse(new ErrorInfo(ex.Message));
            }
        }

前端使用layui上传代码如下

 //多文件列表示例
    layui.use('upload', function () {
        var $ = layui.jquery
        , upload = layui.upload;
        var demoListView = $('#demoList')
  , uploadListIns = upload.render({
      elem: '#testList'
    , url: PublicMethods.apiHttp + '/api/WebFileUpload'
       , before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
           if (HasFile) {
               layer.load(); //上传loading
           }
           else {

           }
       }
    , accept: 'file'
    , multiple: true
    , auto: false
    , bindAction: '#testListAction'
    , choose: function (obj) {
         files = obj.pushFile(); //将每次选择的文件追加到文件队列
        //读取本地文件
        obj.preview(function (index, file, result) {
            var tr = $(['<tr id="upload-' + index + '">'
              , '<td>' + file.name + '</td>'
              , '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
              , '<td class=\'waitupload\'>等待上传</td>'
              , '<td>'
                , '<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
                , '<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
              , '</td>'
            , '</tr>'].join(''));
            HasFile = true;
            //单个重传
            tr.find('.demo-reload').on('click', function () {
                obj.upload(index, file);
            });

            //删除
            tr.find('.demo-delete').on('click', function () {
                delete files[index]; //删除对应的文件
                tr.remove();
            });

            demoListView.append(tr);
        });
    }
    , done: function (res, index,upload) {//, index, upload
        //关闭loadings
        layer.closeAll('loading');
        if (res.success == true) { //上传成功
            //返回的类别和名称
            var opt = { "fileType": res.result[0].type, "name": res.result[0].name };
            arr.push(opt);

            var tr = demoListView.find('tr#upload-' + index)
        , tds = tr.children();
            tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
            tds.eq(3).html(''); //清空操作
            delete files[index]; //删除文件队列已经上传成功的文件
            return;
        }

        this.error(index, upload);
    }
    , error: function (index, upload) {
        //关闭loadings
        layer.closeAll('loading');
        var tr = demoListView.find('tr#upload-' + index)
        , tds = tr.children();
        tds.eq(2).html('<span style="color: #FF5722;" class="errorupload">上传失败</span>');
        tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
    }
  });
    })

后台添加数据把文件从临时文件夹迁移到正式文件夹中,代码如下

 /// <summary>
        /// 新增咨询投诉
        /// </summary>
        public virtual async Task<ZWDT_ConsultComplainCreateDto> CreateZWDT_ConsultComplainAsync(ZWDT_ConsultComplainCreateDto input)
        {
            //TODO:新增前的逻辑判断,是否允许新增
             if (input.accessoryFiles == null && input.ZWDT_ConsultComplain_Files != null)
            {
                foreach (var i in input.ZWDT_ConsultComplain_Files)
                {
                    if (!i.Name.IsNullOrWhiteSpace())
                    {
                        string tempUploadFile = Path.Combine(_appFolders.TempUploadFileFolder, i.Name);
                        FileInfo fileInfo = new FileInfo(tempUploadFile);
                        if (fileInfo.Length > 5242880)
                        {
                            throw new UserFriendlyException(L("FileUpload_Img_SizeLimit"));
                        }
                        string uploadFileExtension = i.Name.Substring(i.Name.IndexOf('.'), (i.Name.Length - i.Name.IndexOf('.')));
                        string newFileName = Guid.NewGuid().ToString("N") + uploadFileExtension;
                        string newFilePath = DateTime.Now.Year.ToString() + "\\" + DateTime.Now.Month.ToString() + "\\" + DateTime.Now.Day.ToString() + "\\";
                        //将相对路径转换成绝对路径
                        string path = HttpContext.Current.Server.MapPath(_appFolders.UploadFileFolder);

                        string uploadFile = Path.Combine(path, newFilePath);
                        DirectoryHelper.CreateIfNotExists(uploadFile);//创建文件夹
                        File.Copy(tempUploadFile, uploadFile + newFileName, true);
                        FileHelper.DeleteIfExists(tempUploadFile);

                        //获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号
                        //var http = await _settingManager.GetSettingValueAsync(AppSettings.General.WebSiteRootAddress);
                        var strName = i.Name.Substring(0, i.Name.LastIndexOf("."));
                        i.Name = strName.Substring(strName.IndexOf("_") + 1, strName.Length - strName.IndexOf("_") - 1);
                        i.Title = i.Name;
                        i.FilePath = (_appFolders.UploadFileFolder + newFilePath + newFileName).Replace("\\", "/");

                    }
                    //附件对应的咨询投诉表中的id
                    //i.ConsultComplainId = entityId;
                    //await _zWDT_ConsultComplain_fileRepository.InsertAsync(i);
                }
            }
            var entity = input.MapTo<ZWDT_ConsultComplain>();

            if (entity.Mobile.IsNullOrWhiteSpace() && !entity.Phone.IsNullOrWhiteSpace()) {
                entity.Mobile = entity.Phone;
            }
            else if (!entity.Mobile.IsNullOrWhiteSpace() && entity.Phone.IsNullOrWhiteSpace())
            {
                entity.Phone = entity.Mobile;
            }
            entity.ReplyState = 0;
            entity.Supervisorystate = false;
            try
            {
                var entityId = await _zWDT_ConsultComplainRepository.InsertAndGetIdAsync(entity);
                if (input.accessoryFiles != null && input.ZWDT_ConsultComplain_Files == null)
                {
                    ZWDT_ConsultComplain_Files FilesDto;
                    //图片流上传
                    List<string> ListImg = ImageUploadMobile(input.accessoryFiles);
                    foreach (var item in ListImg)
                    {
                        FilesDto = new ZWDT_ConsultComplain_Files();
                        FilesDto.ConsultComplainId = entityId;
                        FilesDto.Active = 1;
                        FilesDto.FilePath = item;
                        FilesDto.FileType = 0;
                        await _zWDT_ConsultComplain_fileRepository.InsertAsync(FilesDto);
                    }
                }
               
                //流程轨迹
                FlowTracksCreateDto dto = new FlowTracksCreateDto();
                dto.ConsultId = entityId;//事项id
                dto.HandleStatus = 0;//处理状态
                await _zWDT_ConsultComplainAppService.CreateFlowWorkTracksAsync(dto);                
                //推送OA代办事项 (待受理)
                //var strBool =await PushAgents(entity.Title, entityId, entity.Type.Value);
            }
            catch (Exception ex)
            {
                string s = ex.Message;
                _Logger.Info("咨询投诉举报功能-错误:"+s);
                throw;
            }

            return entity.MapTo<ZWDT_ConsultComplainCreateDto>();
        } 


猜你喜欢

转载自blog.csdn.net/ao123056/article/details/79202444
今日推荐