public Media GetMediaInstance(IFormFile mediaFile, int userId) { byte[] fileBytes; using (var stream = new MemoryStream()) { mediaFile.CopyTo(stream); fileBytes = stream.ToArray(); } var saveDirectory = ServerHelper.MapPath(ApplicationConfig.MediaDirectory, true); var fileName = SafeWriteBytesToFile(mediaFile.FileName, saveDirectory, fileBytes); //file extension and it's type var fileExtension = _localFileProvider.GetExtension(mediaFile.FileName); if (!string.IsNullOrEmpty(fileExtension)) { fileExtension = fileExtension.ToLowerInvariant(); } var contentType = mediaFile.ContentType; //an image? if (string.IsNullOrEmpty(contentType)) { contentType = PictureUtility.GetContentType(fileExtension); } //no? a video? if (string.IsNullOrEmpty(contentType)) { contentType = VideoUtility.GetContentType(fileExtension); } //no? let it be default one then if (string.IsNullOrEmpty(contentType)) { contentType = "application/octet-stream"; } var media = new Media() { MimeType = contentType, UserId = userId, Name = mediaFile.FileName, CreatedOn = DateTime.UtcNow, SystemName = fileName, AlternativeText = mediaFile.FileName }; media.ThumbnailPath = GetPictureUrl(media, 150, 150, true); media.LocalPath = GetPictureUrl(media, 0, 0, true); return(media); }
public IActionResult UploadFile(UploadFileModel uploadFileModel) { if (uploadFileModel.ProductId < 1) { return(NotFound()); } var product = _productService.Get(uploadFileModel.ProductId); if (!product.IsPublic() && !CurrentUser.Can(CapabilitySystemNames.EditProduct)) { return(NotFound()); } if (product.ProductAttributes.All(x => x.InputFieldType != InputFieldType.FileUpload)) { return(R.Fail.With("error", T("The product doesn't accept any uploads")).Result); } //guest signin if user is not signed in ApplicationEngine.GuestSignIn(); var fileBytes = uploadFileModel.MediaFile.GetBytesAsync().Result; var upload = new Upload() { UserId = CurrentUser.Id, FileBytes = fileBytes, FileType = uploadFileModel.MediaFile.ContentType, FileExtension = _localFileProvider.GetExtension(uploadFileModel.MediaFile.FileName), Guid = Guid.NewGuid().ToString() }; _uploadService.Insert(upload); var downloadUrl = ApplicationEngine.RouteUrl(RouteNames.DownloadUploadFile, new { guid = upload.Guid }); return(R.Success.With("guid", upload.Guid).With("url", downloadUrl).Result); }