public async Task <ActionResult <MaterialVideo> > Create([FromQuery] CreateRequest request, [FromForm] IFormFile file) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.MaterialVideo)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (file == null) { return(this.Error(Constants.ErrorUpload)); } var fileName = Path.GetFileName(file.FileName); var fileType = PathUtils.GetExtension(fileName); if (!_pathManager.IsVideoExtensionAllowed(site, fileType)) { return(this.Error(Constants.ErrorVideoExtensionAllowed)); } if (!_pathManager.IsVideoSizeAllowed(site, file.Length)) { return(this.Error(Constants.ErrorVideoSizeAllowed)); } var materialVideoName = PathUtils.GetMaterialFileName(fileName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Video); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialVideoName); await _pathManager.UploadAsync(file, filePath); var video = new MaterialVideo { GroupId = request.GroupId, Title = PathUtils.RemoveExtension(fileName), FileType = fileType.ToUpper().Replace(".", string.Empty), Url = PageUtils.Combine(virtualDirectoryPath, materialVideoName) }; await _materialVideoRepository.InsertAsync(video); return(video); }
public async Task <ActionResult <UploadResult> > Upload([FromQuery] UploadRequest request, [FromForm] IFormFile file) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.WxReplyAuto, MenuUtils.SitePermissions.WxReplyBeAdded)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (file == null) { return(this.Error("请选择有效的文件上传")); } MaterialImage image = null; MaterialAudio audio = null; MaterialVideo video = null; if (request.MaterialType == MaterialType.Image) { var fileName = Path.GetFileName(file.FileName); var extName = PathUtils.GetExtension(fileName); if (!_pathManager.IsImageExtensionAllowed(site, extName)) { return(this.Error("此图片格式已被禁止上传,请转换格式后上传!")); } var materialFileName = PathUtils.GetMaterialFileName(fileName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image); var directoryPath = PathUtils.Combine(_pathManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await _pathManager.UploadAsync(file, filePath); await _pathManager.AddWaterMarkAsync(site, filePath); image = new MaterialImage { GroupId = -request.SiteId, Title = fileName, Url = PageUtils.Combine(virtualDirectoryPath, materialFileName) }; await _materialImageRepository.InsertAsync(image); } else if (request.MaterialType == MaterialType.Audio) { var fileName = Path.GetFileName(file.FileName); var fileType = PathUtils.GetExtension(fileName); if (!_pathManager.IsUploadExtensionAllowed(UploadType.Audio, site, fileType)) { return(this.Error("文件只能是音频格式,请选择有效的文件上传!")); } var materialFileName = PathUtils.GetMaterialFileName(fileName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Audio); var directoryPath = PathUtils.Combine(_pathManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await _pathManager.UploadAsync(file, filePath); audio = new MaterialAudio { GroupId = -request.SiteId, Title = PathUtils.RemoveExtension(fileName), FileType = fileType.ToUpper().Replace(".", string.Empty), Url = PageUtils.Combine(virtualDirectoryPath, materialFileName) }; await _materialAudioRepository.InsertAsync(audio); } else if (request.MaterialType == MaterialType.Video) { var fileName = Path.GetFileName(file.FileName); var fileType = PathUtils.GetExtension(fileName); if (!_pathManager.IsUploadExtensionAllowed(UploadType.Video, site, fileType)) { return(this.Error("文件只能是视频格式,请选择有效的文件上传!")); } var materialVideoName = PathUtils.GetMaterialFileName(fileName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Video); var directoryPath = PathUtils.Combine(_pathManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialVideoName); await _pathManager.UploadAsync(file, filePath); video = new MaterialVideo { GroupId = -request.SiteId, Title = PathUtils.RemoveExtension(fileName), FileType = fileType.ToUpper().Replace(".", string.Empty), Url = PageUtils.Combine(virtualDirectoryPath, materialVideoName) }; await _materialVideoRepository.InsertAsync(video); } return(new UploadResult { MaterialType = request.MaterialType, Image = image, Audio = audio, Video = video }); }
public async Task <bool> UpdateAsync(MaterialVideo video) { return(await _repository.UpdateAsync(video, Q .CachingRemove(CacheKey) )); }
public async Task <int> InsertAsync(MaterialVideo video) { return(await _repository.InsertAsync(video, Q .CachingRemove(CacheKey) )); }
public async Task PullMaterialAsync(string accessTokenOrAppId, MaterialType materialType, int groupId) { var count = await MediaApi.GetMediaCountAsync(accessTokenOrAppId); if (materialType == MaterialType.Message) { if (count.news_count > 0) { var newsList = await MediaApi.GetNewsMediaListAsync(accessTokenOrAppId, 0, count.news_count); newsList.item.Reverse(); foreach (var message in newsList.item) { if (await _materialMessageRepository.IsExistsAsync(message.media_id)) { continue; } //var news = await MediaApi.GetForeverNewsAsync(accessTokenOrAppId, message.media_id); var messageItems = new List <MaterialMessageItem>(); foreach (var item in message.content.news_item) { var imageUrl = string.Empty; if (!string.IsNullOrEmpty(item.thumb_media_id) && !string.IsNullOrEmpty(item.thumb_url)) { await using var ms = new MemoryStream(); await MediaApi.GetForeverMediaAsync(accessTokenOrAppId, item.thumb_media_id, ms); ms.Seek(0, SeekOrigin.Begin); var extName = "png"; if (StringUtils.Contains(item.thumb_url, "wx_fmt=")) { extName = item.thumb_url.Substring(item.thumb_url.LastIndexOf("=", StringComparison.Ordinal) + 1); } var materialFileName = PathUtils.GetMaterialFileNameByExtName(extName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await FileUtils.WriteStreamAsync(filePath, ms); imageUrl = PageUtils.Combine(virtualDirectoryPath, materialFileName); } else if (!string.IsNullOrEmpty(item.thumb_url)) { var extName = "png"; if (StringUtils.Contains(item.thumb_url, "wx_fmt=")) { extName = item.thumb_url.Substring(item.thumb_url.LastIndexOf("=", StringComparison.Ordinal) + 1); } var materialFileName = PathUtils.GetMaterialFileNameByExtName(extName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); WebClientUtils.Download(item.thumb_url, filePath); imageUrl = PageUtils.Combine(virtualDirectoryPath, materialFileName); } var commentType = CommentType.Block; if (item.need_open_comment == 1) { commentType = item.only_fans_can_comment == 1 ? CommentType.OnlyFans : CommentType.Everyone; } messageItems.Add(new MaterialMessageItem { MessageId = 0, MaterialType = MaterialType.Article, MaterialId = 0, Taxis = 0, ThumbMediaId = item.thumb_media_id, Author = item.author, Title = item.title, ContentSourceUrl = item.content_source_url, Content = SaveImages(item.content), Digest = item.digest, ShowCoverPic = item.show_cover_pic == "1", ThumbUrl = imageUrl, Url = item.url, CommentType = commentType }); } await _materialMessageRepository.InsertAsync(groupId, message.media_id, messageItems); } } } else if (materialType == MaterialType.Image) { if (count.image_count > 0) { var list = await MediaApi.GetOthersMediaListAsync(accessTokenOrAppId, UploadMediaFileType.image, 0, count.image_count); foreach (var image in list.item) { if (await _materialImageRepository.IsExistsAsync(image.media_id)) { continue; } await using var ms = new MemoryStream(); await MediaApi.GetForeverMediaAsync(accessTokenOrAppId, image.media_id, ms); ms.Seek(0, SeekOrigin.Begin); var extName = image.url.Substring(image.url.LastIndexOf("=", StringComparison.Ordinal) + 1); var materialFileName = PathUtils.GetMaterialFileNameByExtName(extName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await FileUtils.WriteStreamAsync(filePath, ms); var material = new MaterialImage { GroupId = groupId, Title = image.name, Url = PageUtils.Combine(virtualDirectoryPath, materialFileName), MediaId = image.media_id }; await _materialImageRepository.InsertAsync(material); } } } else if (materialType == MaterialType.Audio) { if (count.voice_count > 0) { var list = await MediaApi.GetOthersMediaListAsync(accessTokenOrAppId, UploadMediaFileType.voice, 0, count.voice_count); foreach (var voice in list.item) { if (await _materialAudioRepository.IsExistsAsync(voice.media_id)) { continue; } await using var ms = new MemoryStream(); await MediaApi.GetForeverMediaAsync(accessTokenOrAppId, voice.media_id, ms); ms.Seek(0, SeekOrigin.Begin); var extName = voice.url.Substring(voice.url.LastIndexOf("=", StringComparison.Ordinal) + 1); var materialFileName = PathUtils.GetMaterialFileNameByExtName(extName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Audio); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await FileUtils.WriteStreamAsync(filePath, ms); var audio = new MaterialAudio { GroupId = groupId, Title = voice.name, FileType = extName.ToUpper().Replace(".", string.Empty), Url = PageUtils.Combine(virtualDirectoryPath, materialFileName), MediaId = voice.media_id }; await _materialAudioRepository.InsertAsync(audio); } } } else if (materialType == MaterialType.Video) { if (count.video_count > 0) { var list = await MediaApi.GetOthersMediaListAsync(accessTokenOrAppId, UploadMediaFileType.video, 0, count.video_count); foreach (var video in list.item) { if (await _materialVideoRepository.IsExistsAsync(video.media_id)) { continue; } await using var ms = new MemoryStream(); await MediaApi.GetForeverMediaAsync(accessTokenOrAppId, video.media_id, ms); ms.Seek(0, SeekOrigin.Begin); var extName = "mp4"; if (!string.IsNullOrEmpty(video.url)) { extName = video.url.Substring(video.url.LastIndexOf("=", StringComparison.Ordinal) + 1); } var materialFileName = PathUtils.GetMaterialFileNameByExtName(extName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Video); var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath); var filePath = PathUtils.Combine(directoryPath, materialFileName); await FileUtils.WriteStreamAsync(filePath, ms); var material = new MaterialVideo { GroupId = groupId, Title = video.name, FileType = extName.ToUpper().Replace(".", string.Empty), Url = PageUtils.Combine(virtualDirectoryPath, materialFileName), MediaId = video.media_id }; await _materialVideoRepository.InsertAsync(material); } } } }
public async Task <ActionResult <List <SubmitResult> > > Submit([FromBody] SubmitRequest request) { var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(this.Error("无法确定内容对应的站点")); } var result = new List <SubmitResult>(); foreach (var filePath in request.FilePaths) { if (string.IsNullOrEmpty(filePath)) { continue; } var fileName = PathUtils.GetFileName(filePath); var virtualUrl = await _pathManager.GetVirtualUrlByPhysicalPathAsync(site, filePath); var fileUrl = await _pathManager.ParseSiteUrlAsync(site, virtualUrl, true); if (request.IsLibrary) { var materialFileName = PathUtils.GetMaterialFileName(fileName); var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image); var directoryPath = _pathManager.ParsePath(virtualDirectoryPath); var materialFilePath = PathUtils.Combine(directoryPath, materialFileName); DirectoryUtils.CreateDirectoryIfNotExists(materialFilePath); FileUtils.CopyFile(filePath, materialFilePath, true); var video = new MaterialVideo { Title = fileName, Url = PageUtils.Combine(virtualDirectoryPath, materialFileName) }; await _materialVideoRepository.InsertAsync(video); } result.Add(new SubmitResult { FileUrl = fileUrl, FileVirtualUrl = virtualUrl }); } var options = TranslateUtils.JsonDeserialize(site.Get <string>(nameof(LayerVideoUploadController)), new Options { IsChangeFileName = true, IsLibrary = true }); options.IsChangeFileName = request.IsChangeFileName; options.IsLibrary = request.IsLibrary; site.Set(nameof(LayerVideoUploadController), TranslateUtils.JsonSerialize(options)); await _siteRepository.UpdateAsync(site); return(result); }