Example #1
0
        private async Task <LinFileResource> HandleFile(IFormFile file)
        {
            var md5     = FileHelper.GenerateMd5(file);
            var linFile = await _linFileRepository.GetFileByMd5(md5);

            if (linFile == null)
            {
                var(realName, relativePath, absolutePath) = _fileService.GetStorePath(file);

                linFile = new LinFile
                {
                    Name      = realName,
                    Path      = relativePath,
                    Extension = FileHelper.GetFileExtension(file),
                    Size      = FileHelper.GetFileSize(file),
                    Md5       = md5
                };

                _fileService.SaveFile(file, absolutePath);
                _linFileRepository.Add(linFile);
                await UnitOfWork.SaveAsync();
            }

            var resource = new LinFileResource
            {
                Key  = file.Name,
                Id   = linFile.Id,
                Path = linFile.Path,
                Url  = Path.Combine(_fileService.StoreDir, linFile.Path)
            };

            return(resource);
        }
Example #2
0
        /// <summary>
        /// 本地文件上传,秒传(根据lin_file表中的md5,与当前文件的路径是否在本地),如果不在,重新上传,覆盖文件表记录
        /// </summary>
        /// <param name="file"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <FileDto> UploadAsync(IFormFile file, int key = 0)
        {
            string  md5     = LinCmsUtils.GetHash <MD5>(file.OpenReadStream());
            LinFile linFile = await _fileRepository.Where(r => r.Md5 == md5 && r.Type == 1).OrderByDescending(r => r.CreateTime).FirstAsync();

            if (linFile != null && File.Exists(Path.Combine(_hostingEnv.WebRootPath, linFile.Path)))
            {
                return(new FileDto
                {
                    Id = linFile.Id,
                    Key = "file_" + key,
                    Path = linFile.Path,
                    Url = _fileStorageOption.LocalFile.Host + linFile.Path
                });
            }

            long id;

            var(path, len) = await this.LocalUploadAsync(file);

            if (linFile == null)
            {
                LinFile saveLinFile = new LinFile()
                {
                    Extension = Path.GetExtension(file.FileName),
                    Md5       = md5,
                    Name      = file.FileName,
                    Path      = path,
                    Type      = 1,
                    Size      = len
                };
                id = (await _fileRepository.InsertAsync(saveLinFile)).Id;
            }
            else
            {
                linFile.Path = path;
                await _fileRepository.UpdateAsync(linFile);

                id = linFile.Id;
            }

            return(new FileDto
            {
                Id = id,
                Key = "file_" + key,
                Path = path,
                Url = _fileStorageOption.LocalFile.Host + path
            });
        }
        /// <summary>
        /// 上传文件至七牛云
        /// </summary>
        /// <param name="file">单个文件</param>
        /// <param name="key"></param>
        /// <returns></returns>
        public FileDto Upload(IFormFile file, int key = 0)
        {
            string md5 = LinCmsUtils.GetHash <MD5>(file.OpenReadStream());

            LinFile linFile = _freeSql.Select <LinFile>().Where(r => r.Md5 == md5 && r.Type == 2).First();

            if (linFile != null)
            {
                return(new FileDto
                {
                    Id = linFile.Id,
                    Key = "file_" + key,
                    Path = linFile.Path,
                    Url = _configuration[LinConsts.Qiniu.Host] + linFile.Path
                });
            }

            string fileName = ContentDispositionHeaderValue
                              .Parse(file.ContentDisposition)
                              .FileName.Trim().ToString();

            string extension = Path.GetExtension(fileName);

            string path = this.UploadToQiniu(file);

            long    size        = 0;
            LinFile saveLinFile = new LinFile()
            {
                Extension  = extension,
                Md5        = md5,
                Name       = fileName,
                Path       = path,
                Type       = 2,
                CreateTime = DateTime.Now,
                Size       = size
            };

            long id = _freeSql.Insert(saveLinFile).ExecuteIdentity();

            return(new FileDto
            {
                Id = (int)id,
                Key = "file_" + key,
                Path = path,
                Url = _configuration[LinConsts.Qiniu.Host] + path
            });
        }
Example #4
0
        /// <summary>
        /// 上传文件至七牛云,如果本地存在这条记录,直接返回文件的信息
        /// </summary>
        /// <param name="file">单个文件</param>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <FileDto> UploadAsync(IFormFile file, int key = 0)
        {
            string md5 = LinCmsUtils.GetHash <MD5>(file.OpenReadStream());

            LinFile linFile = await _fileRepository.Where(r => r.Md5 == md5 && r.Type == 2).FirstAsync();

            if (linFile != null)
            {
                return(new FileDto
                {
                    Id = linFile.Id,
                    Key = "file_" + key,
                    Path = linFile.Path,
                    Url = _fileStorageOption.Qiniu.Host + linFile.Path
                });
            }

            string path = this.QiniuUpload(file);

            LinFile saveLinFile = new LinFile()
            {
                Extension = Path.GetExtension(file.FileName),
                Md5       = md5,
                Name      = file.FileName,
                Path      = path,
                Type      = 2,
                Size      = file.Length,
            };

            long id = (await _fileRepository.InsertAsync(saveLinFile)).Id;

            return(new FileDto
            {
                Id = id,
                Key = "file_" + key,
                Path = path,
                Url = _fileStorageOption.Qiniu.Host + path
            });
        }
        public FileDto Upload(IFormFile file, int key = 0)
        {
            string domainUrl = _configuration[LinConsts.SITE_DOMAIN];
            string fileDir   = _configuration[LinConsts.File.STORE_DIR];

            string md5 = LinCmsUtils.GetHash <MD5>(file.OpenReadStream());

            LinFile linFile = _freeSql.Select <LinFile>().Where(r => r.Md5 == md5 && r.Type == 1).OrderByDescending(r => r.CreateTime).First();

            if (linFile != null && File.Exists(Path.Combine(_hostingEnv.WebRootPath, fileDir, linFile.Path)))
            {
                return(new FileDto
                {
                    Id = linFile.Id,
                    Key = "file_" + key,
                    Path = linFile.Path,
                    Url = domainUrl + fileDir + "/" + linFile.Path
                });
            }

            string fileName  = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim().ToString();
            string extension = Path.GetExtension(fileName);
            string now       = DateTime.Now.ToString("yyy/MM/dd");

            string newSaveName = Guid.NewGuid() + extension;

            string savePath = Path.Combine(_hostingEnv.WebRootPath, fileDir, now);

            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }

            long len;

            using (FileStream fs = File.Create(Path.Combine(savePath, newSaveName)))
            {
                file.CopyTo(fs);
                len = fs.Length;
                fs.Flush();
            }

            long   id;
            string path = Path.Combine(now, newSaveName).Replace("\\", "/");

            if (linFile == null)
            {
                LinFile saveLinFile = new LinFile()
                {
                    Extension  = Path.GetExtension(fileName),
                    Md5        = md5,
                    Name       = fileName,
                    Path       = path,
                    Type       = 1,
                    CreateTime = DateTime.Now,
                    Size       = len
                };
                id = _freeSql.Insert(saveLinFile).ExecuteIdentity();
            }
            else
            {
                _freeSql.Update <LinFile>(linFile.Id).Set(a => a.Path, path).ExecuteAffrows();
                id = linFile.Id;
            }

            return(new FileDto
            {
                Id = (int)id,
                Key = "file_" + key,
                Path = path,
                Url = domainUrl + "/" + fileDir + "/" + path
            });
        }
        public List <FileDto> Upload(IFormFile file, int key = 0)
        {
            string domainUrl = _configuration["SITE_DOMAIN"];
            string fileDir   = _configuration["FILE:STORE_DIR"];

            string md5 = LinCmsUtils.GetHash <MD5>(file.OpenReadStream());

            LinFile linFile = _freeSql.Select <LinFile>().Where(r => r.Md5 == md5).First();

            if (linFile != null)
            {
                return(new List <FileDto>
                {
                    new FileDto
                    {
                        Id = linFile.Id,
                        Key = "file_" + key,
                        Path = linFile.Path,
                        Url = domainUrl + "/" + _configuration["FILE:STORE_DIR"] + "/" + linFile.Path
                    }
                });
            }

            string filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim().ToString();

            DateTime now = DateTime.Now;

            string newSaveName = Guid.NewGuid() + Path.GetExtension(filename);

            string savePath = Path.Combine(_hostingEnv.WebRootPath, fileDir, now.ToString("yyy/MM/dd"));

            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }

            int len;

            using (FileStream fs = System.IO.File.Create(Path.Combine(savePath, newSaveName)))
            {
                file.CopyTo(fs);
                len = (int)fs.Length;
                fs.Flush();
            }

            LinFile saveLinFile = new LinFile()
            {
                Extension  = Path.GetExtension(filename),
                Md5        = md5,
                Name       = filename,
                Path       = Path.Combine(now.ToString("yyy/MM/dd"), newSaveName).Replace("\\", "/"),
                Type       = 1,
                CreateTime = DateTime.Now,
                Size       = len
            };

            long id = _freeSql.Insert(saveLinFile).ExecuteIdentity();

            return(new List <FileDto>
            {
                new FileDto
                {
                    Id = (int)id,
                    Key = "file_" + key,
                    Path = saveLinFile.Path,
                    Url = domainUrl + "/" + fileDir + "/" + saveLinFile.Path
                }
            });
        }
 public void Add(LinFile linFile)
 {
     _linContext.Add(linFile);
 }