Example #1
0
        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;
        }
Example #2
0
 /// <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;
 }
Example #3
0
        /// <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;
        }
Example #4
0
        /// <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;
        }
Example #5
0
        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;
        }