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); }
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)); }
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); } }
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)); } }
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++; } }
/// <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); }
/// <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); } } } }
/// <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); }