/// <summary> /// Uploads and saves a file /// </summary> /// <param name="siteId"></param> /// <param name="groupIds"></param> /// <param name="userId"></param> /// <param name="title"></param> /// <param name="description"></param> /// <param name="fileFullPath"></param> /// <param name="fileContent"></param> /// <param name="isEnabled"></param> /// <param name="size">if the file is an image and the size is set then the image will be resized</param> /// <returns></returns> public long Upload(long siteId, long[] groupIds, long userId, string title, string description, string fileFullPath, System.IO.Stream fileStream, bool isEnabled, string size) { //throw error in case of validation problem ValidateToUpdateFile(siteId, userId, groupIds); //SAVE THE FILE ------------------------------------------------------ awFile file = new awFile(); file.fileId = MiscLibrary.CreateUniqueId(); string resourceFileName = GetFileNameOnly(fileFullPath); string extension = GetFileExension(resourceFileName); bool isVideoFile = _videoLib.isVideoFile(extension); int contentLength = (int)fileStream.Length; string filePath = ""; bool saveOnLocal = isVideoFile || !FileAmazonS3.SaveOnAmazonS3(); SAVED_FILE savedFileInfo = new SAVED_FILE(); //SAVE THE FILE FIRST try { file.contentType = GetContentType(AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileMimeXMLPath, extension); filePath = CreateFilePath(saveOnLocal, siteId, file.fileId, extension); savedFileInfo = SaveFile(siteId, saveOnLocal, file.contentType, filePath, fileStream, size.Trim()); file.isOnLocal = saveOnLocal; file.contentSize = contentLength; file.path = savedFileInfo.filePath.ToLower(); file.siteId = siteId; file.title = String.IsNullOrEmpty(title) ? resourceFileName : title; file.description = description; file.link = GetUrl(file.fileId, savedFileInfo.filePath, "").ToLower(); file.pubDate = DateTime.Now; file.lastBuildDate = DateTime.Now; file.isEnabled = isEnabled; file.userId = userId; file.createDate = DateTime.Now; _context.awFiles.InsertOnSubmit(file); _context.SubmitChanges(); } catch (Exception ex) { DeleteFromStorage(siteId, saveOnLocal, filePath); throw ex; } //add file to groups AddFileToGroups(file.fileId, groupIds); //IF FILE IS A VIDEO FILE THEN CONVERT IT if (isVideoFile) { IfVideoConvertToFLV(file.fileId); } return(file.fileId); }
/// <summary> /// Add file with URL address /// </summary> /// <param name="siteId"></param> /// <param name="groupIds"></param> /// <param name="userId"></param> /// <param name="title"></param> /// <param name="description"></param> /// <param name="fileUrl"></param> /// <param name="isEnabled"></param> /// <returns></returns> public long Add(long siteId, long fileId, long[] groupIds, long userId, string title, string description, string fileUrl, string thumbUrl, bool isEnabled) { //Check if all the file groups exist--------------- var groupList = from g in _context.awFileGroups where groupIds.Contains(g.fileGroupId) select g; if (groupList == null || groupList.Count() < groupIds.Length) { throw new Exception("One or more file groups do not exist"); } //Save the file awFile file = new awFile(); file.fileId = fileId > 0 ? fileId : MiscLibrary.CreateUniqueId(); string resourceFileName = GetFileNameOnly(fileUrl); string extension = GetFileExension(resourceFileName); //SAVE THE FILE FIRST try { file.contentType = GetContentType(AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileMimeXMLPath, extension); file.isOnLocal = false; //this also can be used for external urls (not only amazon) file.contentSize = 0; file.path = fileUrl.ToLower(); file.siteId = siteId; file.title = String.IsNullOrEmpty(title) ? resourceFileName : title; file.description = description; file.link = fileUrl.ToLower(); file.thumbnail = thumbUrl.ToLower(); file.pubDate = DateTime.Now; file.lastBuildDate = DateTime.Now; file.isEnabled = isEnabled; file.userId = userId; file.createDate = DateTime.Now; _context.awFiles.InsertOnSubmit(file); _context.SubmitChanges(); } catch (Exception ex) { throw ex; } //add file to groups AddFileToGroups(file.fileId, groupIds); return(file.fileId); }
/// <summary> /// /// </summary> /// <param name="fileId"></param> public void Delete(long fileId) { if (fileId <= 0) { return; } new AWAPI_BusinessLibrary.library.BlogLibrary().RemoveFileBlogPostRelationByFileId(fileId); //Delete contest entry relation new AWAPI_BusinessLibrary.library.ContestLibrary().DeleteContestEntriesByFileId(fileId); //delete filegroup relation DeleteFileGroupRelationByFileId(fileId); var files = from f in _context.awFiles where f.fileId.Equals(fileId) select f; if (files == null || files.Count() == 0) { return; } awFile file = files.First(); _context.awFiles.DeleteOnSubmit(file); _context.SubmitChanges(); if (file.path != null) { DeleteFromStorage(file.siteId, file.isOnLocal, file.path); if (!String.IsNullOrEmpty(file.thumbnail)) { DeleteFromStorage(file.siteId, file.isOnLocal, file.thumbnail); } //delete the thumbs if (file.isOnLocal) { DeleteThumbs(file.fileId, file.path); } } }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="size"></param> /// <param name="pushSize"></param> /// <returns></returns> public FileInfo GetFileInfo(long id, string size, bool pushSize) { FileInfo fi = new FileInfo(); fi.Id = id; fi.SiteId = 0; fi.Path = ""; fi.PathWithSize = ""; fi.Extension = ""; fi.ContentType = "image/jpeg"; fi.isOnLocal = false; //GetFileInfo image awFile file = _context.awFiles.FirstOrDefault(i => i.fileId.Equals(fi.Id)); if (file == null) { return(fi); } fi.SiteId = file.siteId; fi.isOnLocal = file.isOnLocal; fi.Path = file.path; fi.FileName = String.IsNullOrEmpty(file.title) ? GetFileNameOnly(fi.Path) : file.title.Replace(" ", "_").Replace("'", "") + "." + fi.Extension; if (fi.isOnLocal && !File.Exists(fi.Path)) { //fi.Path = AWAPI_FilePath + "\\ImageNotAvailable.jpg"; //string source = HttpContext.Current.Server.MapPath("~/ImageNotAvailable.jpg"); fi.Path = HttpContext.Current.Server.MapPath("~/img/imageNotAvailable.jpg"); //if (!File.Exists(fi.Path)) // File.Copy(source, fi.Path); } fi.Extension = GetFileExension(fi.Path); fi.PathWithSize = fi.Path; //example without pushSize : c:\temp\34234234_300x100.jpg //example with pushSize : c:\temp\34234234_300x100_cropped.jpg if (!string.IsNullOrEmpty(size)) { if (!pushSize) { fi.PathWithSize = fi.Path.Replace("." + fi.Extension, "") + "_" + size + "." + fi.Extension; } else { fi.PathWithSize = fi.Path.Replace("." + fi.Extension, "") + "_" + size + "_fixed." + fi.Extension; } } //get the fileContent type if (file.contentType != null && file.contentType != "") { fi.ContentType = file.contentType; } else { fi.ContentType = GetContentType(AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileMimeXMLPath, fi.Extension); } return(fi); }
/// <summary> /// If file is video, then convert it to FLV, /// delete the original file, update the database /// with new flv's attributes /// </summary> /// <param name="fileId"></param> /// <returns>Returns the file's full path</returns> void IfVideoConvertToFLV(long fileId) { try { //Get the file from DB awFile file = (from l in _context.awFiles where l.fileId.Equals(fileId) select l).FirstOrDefault(); if (file == null) { return; } string extension = GetFileExension(file.path); string path = file.path; //Only Video Files, (flv won't be converted) if (!_videoLib.isVideoFile(extension)) { return; } //CONVERT and GET THE NEW FILES LOCATION OutputPackage videoPackage = _videoLib.ConvertToFLV(path); //GET THE NEW FILES INFO file.contentSize = videoPackage.Length; file.contentType = GetContentType(AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileMimeXMLPath, "flv"); SAVED_FILE savedFile = new SAVED_FILE(); if (FileAmazonS3.SaveOnAmazonS3()) { //load the flv file into byte array, and save it to amazon s3 FileStream fileStream = new FileStream(videoPackage.Path, System.IO.FileMode.Open); //SAVE THE VIDEO FILE string keyName = String.Format("{0}/{1}.flv", file.siteId, file.fileId); savedFile = SaveFile(file.siteId, false, file.contentType, keyName, fileStream, ""); System.IO.File.Delete(videoPackage.Path); file.path = savedFile.filePath; //SAVE THE THUMB if (videoPackage.PreviewImage != null && !String.IsNullOrEmpty(videoPackage.PreviewImagePath) && System.IO.File.Exists(videoPackage.PreviewImagePath)) { string thumbFile = String.Format("{0}/{1}.jpg", file.siteId, file.fileId); FileStream videoPreviewStream = new FileStream(videoPackage.PreviewImagePath, System.IO.FileMode.Open); savedFile = SaveFile(file.siteId, false, "image/jpeg", thumbFile, videoPreviewStream, ""); file.thumbnail = savedFile.filePath; if (System.IO.File.Exists(videoPackage.PreviewImagePath)) { System.IO.File.Delete(videoPackage.PreviewImagePath); } } file.isOnLocal = false; } else { file.isOnLocal = true; file.path = videoPackage.Path; file.thumbnail = videoPackage.PreviewImagePath; } _context.SubmitChanges(); } catch (Exception ex) { throw ex; } }
/// <summary> /// Updates awFile /// also, if there is a relation between file and awContestEntry, and the /// file's original isEnabled=false, and new isEnabled= true, then enabled the awFile record /// </summary> /// <param name="fileId"></param> /// <param name="groupIds"></param> /// <param name="title"></param> /// <param name="description"></param> /// <param name="fileFullPath"></param> /// <param name="fileContent"></param> /// <param name="isEnabled"></param> /// <param name="fileStream"></parparam> /// <param name="size"></param> public void Update(long fileId, long[] groupIds, string title, string description, string fileFullPath, System.IO.Stream fileStream, bool?isEnabled, string size) { //GET THE FILE fileFullPath = fileFullPath.ToLower(); awFile fl = _context.awFiles.FirstOrDefault(f => f.fileId.Equals(fileId)); if (fl == null) { throw new Exception("File not found in the database."); } //throw error in case of validation problem ValidateToUpdateFile(fl.siteId, fl.userId, groupIds); bool uploadFile = (fileStream != null && fileStream.Length > 0) ? true : false; string resourceFileName = GetFileNameOnly(fileFullPath); string newFilesExtension = GetFileExension(fileFullPath); int contentSize = uploadFile ? (int)fileStream.Length : 0; bool isVideoFile = _videoLib.isVideoFile(newFilesExtension); string pathToSave = isVideoFile ? CreateFilePath(true, fl.siteId, fl.fileId, newFilesExtension) : CreateFilePath(!FileAmazonS3.SaveOnAmazonS3(), fl.siteId, fileId, newFilesExtension); string contentType = GetContentType(AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileMimeXMLPath, newFilesExtension);; fl.title = String.IsNullOrEmpty(title) ? resourceFileName : title; fl.description = description; if (uploadFile) { //delete the current file DeleteFromStorage(fl.siteId, fl.isOnLocal, fl.path); if (!String.IsNullOrEmpty(fl.thumbnail)) { DeleteFromStorage(fl.siteId, fl.isOnLocal, fl.thumbnail); } //delete the thumbs if (fl.isOnLocal) { DeleteThumbs(fl.fileId, fl.path); } //set the path //if video file, first it will saved to the local, //then will be saved to the right location (amazon or local) after the conversion fl.isOnLocal = isVideoFile ? true : !FileAmazonS3.SaveOnAmazonS3(); fl.path = pathToSave; fl.link = GetUrl(fl.fileId, pathToSave, ""); fl.thumbnail = ""; fl.contentType = contentType; fl.contentSize = contentSize; } fl.lastBuildDate = DateTime.Now; //if tehere is a connection with contest, bool enableContestEntry = !fl.isEnabled && (isEnabled != null && isEnabled.Value); fl.isEnabled = isEnabled == null ? fl.isEnabled : isEnabled.Value; _context.SubmitChanges(); //add file to groups if (groupIds != null) { AddFileToGroups(fileId, groupIds); } //If new file is uploaded update the new file... if (uploadFile) { if (!isVideoFile) { SaveFile(fl.siteId, !FileAmazonS3.SaveOnAmazonS3(), contentType, pathToSave, fileStream, size); } else { //if video, then save on the local first SaveFile(fl.siteId, true, contentType, pathToSave, fileStream, ""); IfVideoConvertToFLV(fileId); } } if (enableContestEntry) { ContestLibrary lib = new ContestLibrary(); lib.UpdateContestEntriesStatusesByFileId(fileId, true); } }