/// <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> ///// ///// </summary> ///// <param name="filePath"></param> ///// <param name="fileContent"></param> //public static SAVED_FILE SaveFile(bool saveToAmazonS3, string contentType, string filePath, System.IO.Stream fileStream) //{ // //byte[] bytes = StringToByteArray(fileStream); // return SaveFile(saveToAmazonS3, contentType, filePath, bytes); //} /// <summary> /// Saves file to local or Amazon S3 /// </summary> /// <param name="siteId"></param> /// <param name="saveToLocal"></param> /// <param name="contentType"></param> /// <param name="filePath"></param> /// <param name="fileStream"></param> /// <param name="size"></param> /// <returns></returns> public static SAVED_FILE SaveFile(long siteId, bool saveToLocal, string contentType, string filePath, System.IO.Stream fileStream, string size) { SAVED_FILE file = new SAVED_FILE(); System.IO.Stream contentStream = new System.IO.MemoryStream(); filePath = filePath.ToLower(); file.fileSize = (int)fileStream.Length; try { Byte[] buffer; if (!String.IsNullOrEmpty(size) && contentType.ToLower().IndexOf("image") >= 0) { buffer = AWAPI_Common.library.ImageLibrary.ResizeImage("", fileStream, false, 0, 0, size, false); fileStream = new MemoryStream(buffer); } if (saveToLocal) { int length = 1024; int bytesRead = 0; buffer = new Byte[length]; using (FileStream fs = new FileStream(filePath, FileMode.Create)) { do { bytesRead = fileStream.Read(buffer, 0, length); fs.Write(buffer, 0, bytesRead); }while (bytesRead == length); } if (!System.IO.File.Exists(filePath)) { throw new Exception("File could not be saved."); } file.filePath = filePath; //fileStream.Dispose(); } else { FileAmazonS3 s3 = new FileAmazonS3(siteId); file.filePath = s3.Upload(filePath, fileStream, contentType); } } catch (Exception ex) { throw ex; } finally { if (fileStream != null) { fileStream.Close(); } } return(file); }
public string CreateFilePath(bool isOnLocal, long siteId, long fileId, string extension) { string filePath = ""; //if it is a video don't save it to amazon now if (!isOnLocal) { filePath = new FileAmazonS3(siteId).BaseURL + String.Format("{0}/{1}.{2}", siteId, fileId, extension); } else { string directory = String.Format("{0}{1}\\", AWAPI_BusinessLibrary.library.ConfigurationLibrary.Config.fileDirectory, siteId); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } filePath = directory + fileId + "." + extension; } return(filePath.ToLower()); }
/// <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); } }