public long CreateNewFile(FileEntity entity) { int affectedRow = 0; try { using (IDbConnection dbCon = dbFactory.OpenDbConnection()) { string sql = string.Format("insert into autopia_files (file_guid, file_full_name, file_path, file_md5," + " file_size, create_time, last_changed_time) values ({0}, {1}, {2}, {3}, {4},{5}, {6})".Params( entity.file_guid, entity.file_full_name, entity.file_path, entity.file_md5, entity.file_size, entity.create_time, entity.last_changed_time)); affectedRow = dbCon.ExecuteSql(sql); } } catch (Exception e) { string err = string.Format("DataBase Exception in CreateNewFile(): {0}, file_guid={1}, fileName={2}", e.ToString()+this.ConnectionString, entity.file_guid, entity.file_full_name); LogUtil.Error(err); } return affectedRow; }
/// <summary> /// 获取redis中文件缓存 /// </summary> /// <param name="file_guid"></param> /// <param name="width"></param> /// <param name="height"></param> /// <returns></returns> public static FileEntity GetFileEntityFromRedis(string file_guid, int width, int height) { FileEntity entity = new FileEntity(); IScalePicFileRedis ra = ScalePicFileRedisFactory.CreateReadFileRedis(); entity = ra.GetScalePicEntity<FileEntity>(file_guid, width, height); return entity; }
/// <summary> /// 从缓存中获取文件对象 /// </summary> /// <param name="sourceFileGuid"></param> /// <param name="width"></param> /// <param name="height"></param> /// <returns></returns> public static FileEntity GetFileEntityFromCache(string sourceFileGuid, int width, int height) { FileEntity entity = new FileEntity(); Stopwatch watch = new Stopwatch(); watch.Start(); entity = GetFileEntityFromRedis(sourceFileGuid, width, height); if (entity == null) { entity = GetScaleFilePathFromDB(string.Format("{0}_{1}_{2}", sourceFileGuid, width, height)); if (entity != null) { watch.Stop(); LogUtil.Info(string.Format("ScalePictureOperation.GetFileEntityFromDB{0} invoking time {1}ms", JsonUtil<FileEntity>.ToJson(entity), watch.ElapsedMilliseconds)); IScalePicFileRedis ra = ScalePicFileRedisFactory.CreateWriteFileRedis(); ra.SetScalePicEntity<FileEntity>(sourceFileGuid, width, height, entity); } } else { watch.Stop(); LogUtil.Info(string.Format("ScalePictureOperation.GetFileEntityFromRedis{0} invoking time {1}ms", JsonUtil<FileEntity>.ToJson(entity), watch.ElapsedMilliseconds)); } return entity; }
/// <summary> /// 上传新文件并指定guid /// </summary> /// <param name="guid">guid</param> /// <param name="fileName">文件名</param> /// <param name="bytes">文件字节流</param> /// <returns></returns> public static FileEntity PostNewPicture(string guid, string fileName, byte[] bytes) { FileEntity fileEntity = null; try { string filePath = string.Empty; string fileExtName = (fileName.Split('.').Length == 1) ? string.Empty : fileName.Split('.')[1]; // 计算MD5值, 若相同则不传物理文件至FDFS,只保存一条文件记录 string fileMD5 = FileOperationHelper.CalculateChunkMD5(bytes); IFilesDA fileDA_R = FSDbFactory.CreateReadFSDB(); fileEntity = fileDA_R.GetFileEntityByMD5(fileMD5); IFilesDA fileDA = FSDbFactory.CreateWriteFSDB(); if (fileEntity != null && fileEntity.file_md5.Equals(fileMD5)) { FileEntity newEntity = new FileEntity { file_guid = guid, file_full_name = fileName, file_path = fileEntity.file_path, file_md5 = fileMD5, file_size = bytes.Length, create_time = StringUtil.GetDateTimeSeconds(DateTime.Now), last_changed_time = StringUtil.GetDateTimeSeconds(DateTime.Now) }; fileDA.CreateNewFile(newEntity); fileEntity = newEntity; } else { FSManager.UploadFile(bytes, fileExtName, (Exception, path) => { if (null != Exception) { LogUtil.Error(string.Format("Error in FSManager.BeginUploadFile callback: {0}", Exception.ToString())); return; } if (string.IsNullOrEmpty(path)) { LogUtil.Error(string.Format("Error in FSManager.BeginUploadFile callback:fdfs file Pash is null. FileName={0},fileSize={1}", fileName, bytes.Length)); return; } FileEntity entity = new FileEntity { file_guid = guid, file_full_name = fileName, file_path = path, file_md5 = fileMD5, file_size = bytes.Length, create_time = StringUtil.GetDateTimeSeconds(DateTime.Now), last_changed_time = StringUtil.GetDateTimeSeconds(DateTime.Now) }; fileDA.CreateNewFile(entity); fileEntity = entity; }); } } catch (Exception ex) { LogUtil.Error(string.Format("Exception FSService.Post(): {0}", ex.ToString())); } return fileEntity; }
public FileUploadResponse FileUpload(string fileName, long file_size, byte[] file_buffer) { FileUploadResponse response = new FileUploadResponse(); try { string filePath = string.Empty; string fileExtName = fileName.Split('.')[1]; string fileGuid = GetShortGuid(); // 计算MD5值, 若相同则不传物理文件至FDFS,只保存一条文件记录 String fileMD5 = FileOperationHelper.CalculateChunkMD5(file_buffer); FileEntity fileEntity = fileDA_R.GetFileEntityByMD5(fileMD5); if (fileEntity != null && fileEntity.file_md5.Equals(fileMD5)) // 文件已存在 { FileEntity newEntity = new FileEntity { file_guid = fileGuid, file_full_name = fileName, file_path = fileEntity.file_path, file_md5 = fileMD5, file_size = file_size, create_time = StringUtil.GetDateTimeSeconds(DateTime.Now) }; fileDA_W.CreateNewFile(newEntity); } else { // 异步上传新文件 Stopwatch watch = new Stopwatch(); watch.Start(); FSManager.BeginUploadFile(file_buffer, fileName, fileExtName, file_size, (uploadResult, uploadEx) => { if (null != uploadEx) { LogUtil.Error(string.Format("Error in FSManager.BeginUploadFile callback: {0}", uploadEx.ToString())); errorCode = (int)FS_ErrorCode.RequestFile_UploadErr; return; } if (null == uploadResult || string.IsNullOrEmpty(uploadResult.FilePathOnFDFS)) { LogUtil.Error(string.Format("Error in FSManager.BeginUploadFile callback:fdfs file Pash is null. FileName={0},fileSize={1}", fileName, file_size)); errorCode = (int)FS_ErrorCode.RequestFile_UploadErr; return; } watch.Stop(); string info = string.Format("Async upload at server(ProcessId = {0}, ThreadId = {1}, CurrTheadsNum = {2}): file_guid = {3}, file_full_name = {4}," +" file_path = {5}, file_md5 = {6}, file_size = {7}, invoking time = {8}ms", Process.GetCurrentProcess().Id, Thread.CurrentThread.ManagedThreadId, Process.GetCurrentProcess().Threads.Count, fileGuid, fileName, uploadResult.FilePathOnFDFS, fileMD5, file_size, watch.ElapsedMilliseconds); if (watch.ElapsedMilliseconds > 3000) LogUtil.Error(info); else LogUtil.Info(info); // 保存FileGuid ,filePath 和FileName, FileSize到数据库 watch.Start(); FileEntity entity = new FileEntity { file_guid = fileGuid, file_full_name = fileName, file_path = uploadResult.FilePathOnFDFS, file_md5 = fileMD5, file_size = file_size, create_time = StringUtil.GetDateTimeSeconds(DateTime.Now) }; fileDA_W.CreateNewFile(entity); watch.Stop(); info = string.Format("after async upload: Save to mysql db cost {0}ms. file_guid={1}, file_full_name={2}", watch.ElapsedMilliseconds, entity.file_guid, entity.file_full_name); if (watch.ElapsedMilliseconds > 3000) LogUtil.Error(info); else LogUtil.Info(info); }); } response.ret = errorCode; response.message = ErrorCodeDic.GetInstance().CodeMessage(errorCode); response.File_guid = fileGuid; } catch (Exception ex) { LogUtil.Error(string.Format("Exception FSService.Post(): {0}", ex.ToString())); errorCode = (int)FS_ErrorCode.RequestParam_Err; response.ret = errorCode; response.message = ErrorCodeDic.GetInstance().CodeMessage(errorCode); response.File_guid = string.Empty; } return response; }