Beispiel #1
0
        public FileStorageViewModel UploadFile(int memberId, string fileName, string contentType, int size, int?fileImageHeight = null, int?fileImageWidth = null)
        {
            var fileInfo     = new FileStorageViewModel();
            var fileGuidName = Guid.NewGuid();

            var fileEntity = new Infrastructure.Entity.FileStorage()
            {
                Name = HttpUtility.UrlDecode(fileName),
                //  Name =file.FileName,
                FileGuid        = fileGuidName,
                FileSize        = size,
                FileContentType = contentType,
                Creator         = memberId,
                CreateUtcDate   = DateTime.UtcNow,
                FileUrl         = string.Format("{0}api/file/{1}", loginServer, fileGuidName.ToString("N"))
            };

            if (contentType.Contains("image"))
            {
                fileEntity.FileImageHeight = fileImageHeight;
                fileEntity.FileImageWidth  = fileImageWidth;
            }
            // Db File
            fileInfo = Create(fileEntity);
            _uow.SaveChanges();
            return(fileInfo);
        }
Beispiel #2
0
        public async Task <IHttpActionResult> Post(Guid token)
        {
            var addFiles        = new List <Infrastructure.Entity.FileStorage>();
            var streamProvider  = new MultipartFormDataStreamProvider(Path.Combine(drivePath, "upload"));
            var dataFromRequest = await Request.Content.ReadAsMultipartAsync(streamProvider);

            var fileStreams = new List <Stream>();

            var fileStreamIndex = 0;

            foreach (var fileData in streamProvider.FileData)
            {
                var datas = new Infrastructure.Entity.FileStorage()
                {
                    Name = fileData.Headers.ContentDisposition.FileName.Trim('\"'),
                    //    FileSize = fileData.Headers.ContentLength.HasValue ? (int)fileData.Headers.ContentDisposition.Size.Value : 0,
                    FileContentType = fileData.Headers.ContentType.MediaType,
                    FileGuid        = Guid.NewGuid(),
                };
                //建立實體檔案
                File.Copy(fileData.LocalFileName, Path.Combine(drivePath, datas.FileGuid.ToString("N")));
                File.Delete(fileData.LocalFileName);
                var physicalFiles = File.OpenRead(Path.Combine(drivePath, datas.FileGuid.ToString("N")));

                datas.FileSize = Convert.ToInt32(physicalFiles.Length);
                addFiles.Add(datas);
                fileStreams.Add(physicalFiles);
                fileStreamIndex++;
            }
            var memberInfo   = tokenService.GetTokenInfo(token.ToString()).Result;
            var responseData = service.UploadFiles(memberInfo.MemberId, addFiles, fileStreams.ToArray());

            return(responseData != null?Ok(true) : Ok(false));
        }
Beispiel #3
0
        public HttpResponseMessage Get(string g)
        {
            var response = new HttpResponseMessage();
            // NOTE: If there was any other 'async' stuff here, then you would need to return
            // a Task<IHttpActionResult>, but for this simple case you need not.
            var  result = new FileService(g);
            Guid fileGuid;
            var  cancelToken = new CancellationToken(true);

            //查詢FILE DB容器
            var fileInfo = new Infrastructure.Entity.FileStorage();

            if (Guid.TryParse(g, out fileGuid))
            {
                fileInfo = service.GetFileInfoByFileGuidName(fileGuid);
            }

            if (fileInfo == null)
            {
                response.StatusCode = HttpStatusCode.NotFound;
                return(response);
            }

            //查出實體檔案
            var fileData = result.ExecuteAsync(cancelToken);

            if (fileData == null)
            {
                response.StatusCode = HttpStatusCode.NotFound;
                return(response);
            }
            else
            {
                response.Content = new StreamContent(fileData);
                response.Content.Headers.ContentLength = fileInfo.FileSize;
                response.Content.Headers.ContentType   = new MediaTypeHeaderValue(fileInfo.FileContentType);

                return(response);
            }
        }
Beispiel #4
0
        public Task <HttpResponseMessage> GetImage(string g, int w, int h)
        {
            var  result      = new FileService(g, string.Format("{0}_w{1}_h{2}", g, w, h), w, h);
            var  cancelToken = new CancellationToken(true);
            var  response    = new HttpResponseMessage();
            Guid fileGuid;
            //查詢FILE DB容器
            var fileInfo = new Infrastructure.Entity.FileStorage();

            if (Guid.TryParse(g, out fileGuid))
            {
                fileInfo = service.GetFileInfoByFileGuidName(fileGuid);
            }

            if (fileInfo == null)
            {
                response.StatusCode = HttpStatusCode.NotFound;

                return(Task.FromResult(response));
            }

            //查出實體檔案
            var fileData = result.ExecuteAsync(cancelToken);

            if (fileData == null)
            {
                response.StatusCode = HttpStatusCode.NotFound;
                return(Task.FromResult(response));
            }
            else
            {
                response.StatusCode = HttpStatusCode.OK;
                response.Content    = new StreamContent(fileData);
                response.Content.Headers.ContentLength = fileData.Length;
                response.Content.Headers.ContentType   = new MediaTypeHeaderValue(fileInfo.FileContentType);

                return(Task.FromResult(response));
            }
        }
Beispiel #5
0
        public async Task SetFileData()
        {
            multipartFormDataStreamProvider = await Request.Content.ReadAsMultipartAsync(streamProvider);

            //設定檔案資訊
            foreach (var fileData in multipartFormDataStreamProvider.FileData)
            {
                var datas = new Infrastructure.Entity.FileStorage()
                {
                    Name            = fileData.Headers.ContentDisposition.FileName.Trim('\"'),
                    FileContentType = fileData.Headers.ContentType.MediaType,
                    FileGuid        = Guid.NewGuid(),
                };
                //建立實體檔案
                File.Copy(fileData.LocalFileName, Path.Combine(drivePath, datas.FileGuid.ToString("N")));
                File.Delete(fileData.LocalFileName);
                var physicalFiles = File.OpenRead(Path.Combine(drivePath, datas.FileGuid.ToString("N")));
                datas.FileSize = Convert.ToInt32(physicalFiles.Length);
                multipartFormDataFiles.Add(datas);
                fileStreams.Add(physicalFiles);
                fileStreamIndex++;
            }
        }
Beispiel #6
0
        /// <summary>
        /// 上傳檔案
        /// </summary>
        /// <param name="memberId"></param>
        /// <param name="files"></param>
        /// <returns></returns>
        public List <FileStorageViewModel> UploadFile(int memberId, HttpFileCollection files)
        {
            var fileList = new List <FileStorageViewModel>();

            //預設存檔位置
            var drivePath = WebConfigurationManager.AppSettings["DrivePath"];
            //存檔server
            var fileServer = WebConfigurationManager.AppSettings["loginServer"];

            //確認實體檔案資料夾是否存在
            if (!Directory.Exists(drivePath))
            {
                //建一個新的資料夾
                Directory.CreateDirectory(drivePath);
            }


            //開始上傳檔案
            for (int i = 0; i < files.Count; i++)
            {
                var            fileInfo = new FileStorageViewModel();
                HttpPostedFile file     = files[i];

                int?fileImageWidth  = null;
                int?fileImageHeight = null;
                var fileGuidName    = Guid.NewGuid();
                var resourcePath    = Path.Combine(drivePath, fileGuidName.ToString("N"));

                // Physical File
                file.SaveAs(resourcePath);
                var fileEntity = new Infrastructure.Entity.FileStorage()
                {
                    Name            = HttpUtility.UrlDecode(file.FileName),
                    FileGuid        = fileGuidName,
                    FileSize        = file.ContentLength, //Byte
                    FileContentType = file.ContentType,
                    Creator         = memberId,
                    CreateUtcDate   = DateTime.UtcNow,
                    FileUrl         = string.Format("{0}api/file/{1}", fileServer, fileGuidName.ToString("N")),
                    // FileImageUrl = string.Format("{0}api/imgFile/{1}/{2}/{3}", fileServer, fileGuidName.ToString("N"), maxImgWidth, maxImgHeight),
                    FileImageHeight = fileImageHeight,
                    FileImageWidth  = fileImageWidth
                };
                if (file.ContentType.Contains("image"))
                {
                    var imgPath = Path.Combine(drivePath, string.Format("{0}_w{1}_h{2}", fileGuidName.ToString("N"), maxImgWidth, maxImgHeight));

                    System.Drawing.Image image = System.Drawing.Image.FromStream(file.InputStream);

                    //實體圖片寬高
                    fileImageWidth  = image.Width;
                    fileImageHeight = image.Width;
                    //建立一個縮圖
                    ImageResize(resourcePath, maxImgWidth, maxImgHeight, imgPath, file.ContentType);
                }



                // Db File
                fileInfo = Create(fileEntity);
                fileList.Add(fileInfo);
            }
            var db = _uow.DbContext;

            db.SaveChanges();
            return(fileList);
        }
Beispiel #7
0
        /// <summary>
        /// 取得實體檔案資訊
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public FileStream ExecuteAsync(CancellationToken cancellationToken)
        {
            Guid newGuid;
            //DB
            var fileInfo = new Infrastructure.Entity.FileStorage();

            if (Guid.TryParse(fileGuid, out newGuid))
            {
                fileInfo = GetFileInfoByFileGuidName(newGuid);
            }

            //如果資料庫中檔案沒被刪除,或者資料庫中有該檔案
            if (fileInfo == null || fileInfo.DeleteUtcDate != null)
            {
                // 資料庫紀錄不存在
                return(null);
            }


            var filePath = Path.Combine(drivePath, this.fileGuid.Replace("-", ""));

            if (System.IO.File.Exists(filePath) == false)
            {
                return(null);
            }


            if (String.IsNullOrEmpty(this.ThumbnailFileName))
            {
                // 沒有縮圖的 filename,直接輸出原檔案內容
                var fileData = System.IO.File.Open(filePath, FileMode.Open);
                return(fileData);
            }
            else
            {
                // 如果有縮圖的 fileName
                // 組合縮圖 filename 的路徑
                var thumbPath = Path.Combine(drivePath, this.ThumbnailFileName);

                // 查看是否有縮圖檔案
                if (System.IO.File.Exists(thumbPath))
                {
                    var fileData = System.IO.File.Open(thumbPath, FileMode.Open);
                    return(fileData);
                }
                else
                {
                    try
                    {
                        // 拆解縮圖長寬
                        if (this.Width.HasValue && this.Height.HasValue)
                        {
                            ImageResize(filePath, this.Width.Value, this.Height.Value, thumbPath, fileInfo.FileContentType);
                        }
                        else
                        {
                            ImageResize(filePath, this.Width.Value, thumbPath, fileInfo.FileContentType);
                        }

                        var fileSize = new FileInfo(thumbPath).Length;
                        var fileData = System.IO.File.Open(thumbPath, FileMode.Open);

                        return(fileData);
                    }
                    catch (Exception)
                    {
                        return(null);
                    }
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// 儲存個人照片檔案
        /// </summary>
        /// <param name="token"></param>
        /// <param name="account"></param>
        /// <param name="photo"></param>
        /// <returns></returns>
        public Infrastructure.ViewModel.MemberManage.MemberPhotoResponse SaveMemberPhotoFile(string token, string account, string photo)
        {
            var db            = _uow.DbContext;
            var memberService = new MemberService();
            var tokenService  = new TokenService();
            var checkToken    = tokenService.GetTokenInfo(token).Result;

            if (checkToken == null)
            {
                return(null);
            }

            var memberData = db.Members.Find(checkToken.MemberId);

            //    var memberInfo = memberService.UserIdToAccount(checkToken.MemberId);
            if (memberData == null)
            {
                return(null);
            }
            int?fileImageWidth  = null;
            int?fileImageHeight = null;
            var fileGuidName    = Guid.NewGuid();
            var resourcePath    = Path.Combine(drivePath, fileGuidName.ToString("N"));

            var photoData   = Convert.FromBase64String(photo);
            var photoStream = new System.IO.MemoryStream(photoData);
            var photoBitmap = new Bitmap(new MemoryStream(photoData));

            //原始圖片檔
            SetPhotoFileInfo(photoBitmap, resourcePath);

            var imgResizePath = Path.Combine(drivePath, string.Format("{0}_w{1}_h{2}", fileGuidName.ToString("N"), maxImgWidth, maxImgHeight));

            //縮圖檔
            SetPhotoFileResizeInfo(photoBitmap, resourcePath, maxImgWidth, maxImgHeight, imgResizePath);
            var image = System.Drawing.Image.FromStream(photoStream);

            //實體圖片寬高
            fileImageWidth  = image.Width;
            fileImageHeight = image.Width;
            var imgContentType = "image/png";
            var fileServer     = WebConfigurationManager.AppSettings["loginServer"];
            var fileEntity     = new Infrastructure.Entity.FileStorage()
            {
                Name            = memberData.Name + "照片",
                FileGuid        = fileGuidName,
                FileSize        = photoData.Length, //Byte
                FileContentType = imgContentType,
                Creator         = memberData.Id,
                CreateUtcDate   = DateTime.UtcNow,
                FileUrl         = string.Format("{0}api/file/{1}", fileServer, fileGuidName.ToString("N")),

                FileImageHeight = fileImageHeight,
                FileImageWidth  = fileImageWidth
            };

            // Db File
            var fileImgData = Create(fileEntity);

            memberData.Photo      = fileImgData.FileImageUrl;
            memberData.Updated    = TimeData.Create(DateTime.UtcNow);
            memberData.UpdateUser = memberData.Id;
            db.SaveChanges();

            var response = new Infrastructure.ViewModel.MemberManage.MemberPhotoResponse();

            response.AcpdId = account;
            response.Photo  = fileImgData.FileImageUrl;
            return(response);
        }