文件上传与base64格式文件上传

源代码文件直接上传即可,为了手机端测试所以额外转成了base64


      
        选择文件
        
仅限.jpg、.png、.pdf、.doc、.docx、.xls、.xlsx类型文件
上 传

action:后端接口的路径

multiple:多文件上传

limit: 限制上传文件个数,不写默认是无限个,该属性是重复调用接口,上传一个文件调用一次接口,所以后台处理时,只需一个个进行处理,而不需要列表形式接收

要注意,前端传的文件虽然是多次调用接口,但上传的文件属于同一批次,所以增加了index来区分该批次的文件

前端传入文件转换为base64格式

// 选择文件改变
    handleChange(files, fileList, base64Code) {
      // console.log(files); 
      var reader = new FileReader();
      reader.readAsDataURL(files.raw); // 一定要传入file格式  
      reader.onload = () => {
        console.log("file 转 base64结果:" + reader.result);
         this.base64Code = reader.result;
      };
      reader.onerror = function(error) {
        console.log("Error: ", error);
      };
      this.fileList = fileList
    },

后端

文件转化为base64后,字符串会特别长(80kb对应约108087字符),且传输来的值为(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAQABAAD/2w......省略10万),为此需要去除多余字符,只保留base64,之后的有用字符,再将有用字符里多余的换行符等等删掉,并进一步缩减(最后剩余大概不到20位),之后将base64再转换为文件存入指定文件夹中,文件保存名等存入数据库。

保留了直接接收传入文件形式的数据,base64是为了接收手机端传来的数据,文件是直接接收PC端的数据。

        string filePath = @"D:\work\lcpwgzweb\";
        private readonly IUploadService _uploadService;
        public UploadController(IUploadService uploadService)
        {
            _uploadService = uploadService;
        }

        // 上传文件
        [HttpPost]
        [Route("UploadFile")]
        public ActionResult UploadFile([FromForm] IFormFile file, int index, int fileType, string base64Code)
        {
            bool result = true;
            try
            {
                if (base64Code != null)
                {
                        //读取传值的数组第二位的值
                        string base64pre = base64Code.Split("base64,")[1];
                        //去除多余字符
                        string base64 = base64pre.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
                        //base64过长,将其长度缩减
                        if (base64.Length % 4 > 0)
                        {
                            base64 = base64.PadRight(base64.Length + 4 - base64.Length % 4, '=');
                        }

                        //文件名
                        string fileName = System.IO.Path.GetFileName(file.FileName);
                        //文件后缀
                        var fileExtension = Path.GetExtension(file.FileName);//获取文件格式,拓展名
                                                                             //保存的文件名称
                        string guid = Guid.NewGuid().ToString();
                        string saveName = @"uploadFile\" + guid + fileExtension;
                        //base64转文件
                        byte[] bytes = Convert.FromBase64String(base64);

                        // 写入文件到指定位置
                        using (System.IO.FileStream fs = new System.IO.FileStream(filePath + saveName, System.IO.FileMode.Create, System.IO.FileAccess.Write))
                        {
                            fs.Write(bytes, 0, bytes.Length);
                            fs.Flush();
                        }
                        result = _uploadService.UploadFile(index, fileType, fileName, saveName);
                        if (false == result)
                        {
                            return new JsonResult(new { isSuccess = false, resultMsg = "文件上传失败" });
                        }
                    }


                else if (file != null)
                {
                    //文件名
                    string fileName = System.IO.Path.GetFileName(file.FileName);
                    //文件后缀
                    var fileExtension = Path.GetExtension(file.FileName);//获取文件格式,拓展名
                    //保存的文件名称
                    string guid = Guid.NewGuid().ToString();
                    string saveName = @"uploadFile\" + guid + fileExtension;

                    //文件保存
                    using (var fs = System.IO.File.Create(filePath + saveName))
                    {
                        file.CopyTo(fs);
                        fs.Flush();
                    }
                    result = _uploadService.UploadFile(index, fileType, fileName, saveName);
                    if (false == result)
                    {
                        return new JsonResult(new { isSuccess = false, resultMsg = "文件上传失败" });
                    }
                }
                   
                    
            }
            catch (Exception ex)
            {
                return new JsonResult(new { isSuccess = false, resultMsg = "文件上传失败" });
            }

            JsonResult jr = new JsonResult(result);
            return jr;
        }

filePath:上传文件的路径,记得提前建立文件夹

Service及xml只需存入文件保存名即可

Service文件

        /// 
        /// 上传文件
        /// 
        /// 
        public bool UploadFile(int glitchId, int fileType, string fileName, string saveName)
        {
            return _fileMappingRepository.Insert(glitchId, fileType, fileName, saveName);
        }

XML

     
		  INSERT into dbo.FileMapping
		  (GlitchId, FileType, OldFileName, NewFileName)
		  values
		  (@glitchId, @fileType, @fileName, @saveName)
	  

你可能感兴趣的:(c#,vue)