public object Upload([FromForm] IFormCollection formData, [FromQuery] UploadType uploadType) { if (uploadType == UploadType.UserPicture) { if (formData.Files.Count != 1) { return(new { }); } var file = formData.Files[0]; var extName = file.FileName.GetFileExtName(); string targetPath = "/uploads/" + Guid.NewGuid().ToString().Replace("-", "") + extName; FileInfo fileInfo = new FileInfo(Env.WebRootPath + targetPath); using (FileStream fs = new FileStream(fileInfo.ToString(), FileMode.Create)) { file.CopyTo(fs); fs.Flush(); } var entity = new SysFile() { Name = file.FileName, CreateTime = DateTime.Now, ExtName = fileInfo.Extension, Path = targetPath, UploadType = uploadType }; SysFileService.Add(entity); return(new { fileId = entity.Id, url = UrlPrefix + targetPath }); } return(new { }); }
/// <summary> /// 上传素材(已上传则直接返回) /// </summary> /// <param name="type"></param> /// <param name="fileId"></param> /// <returns></returns> public WeChatSuccessUploadResponse CreateData(MaterialType type, string fileId) { var file = new SysFileService().GetData(fileId); AssertUtil.CheckBoolean <SpException>(file == null, $"根据fileid:{fileId}未找到记录", "36B5F5C9-ED65-4CAC-BE60-712278056EA9"); // 检查素材库是否已经上传 var data = Broker.Retrieve <wechat_material>("select * from wechat_material where sys_fileid = @sys_fileid", new Dictionary <string, object>() { { "@sys_fileid", file.sys_fileId } }); if (data != null) { return(new WeChatSuccessUploadResponse() { media_id = data.media_id, url = data.url }); } // 获取文件流 var config = StoreConfig.Config; var stream = ServiceContainer.Resolve <IStoreStrategy>(config?.Type).GetStream(fileId); var media = WeChatApi.AddMaterial(type, stream, file.name, file.content_type); stream.Dispose(); // 创建素材记录 var material = new wechat_material() { wechat_materialId = Guid.NewGuid().ToString(), media_id = media.media_id, url = media.url, sys_fileid = fileId, local_url = SysFileService.GetDownloadUrl(fileId), name = file.name, type = type.ToMaterialTypeString() }; CreateData(material); return(media); }
public List <string> UploadImage(Pixabay.ImageModel image) { return(Broker.ExecuteTransaction(() => { var data = new gallery() { Id = Guid.NewGuid().ToString(), tags = image.tags }; data.previewid = DownloadImage(image.previewURL, data.Id); data.imageid = DownloadImage(image.largeImageURL, data.Id); data.preview_url = SysFileService.GetDownloadUrl(data.previewid); data.image_url = SysFileService.GetDownloadUrl(data.imageid); base.CreateData(data); return new List <string>() { data.previewid, data.imageid }; })); }
/// <summary> /// 创建图文消息素材 /// </summary> /// <param name="fileid"></param> /// <returns></returns> public string CreateData(string fileid) { var file = Broker.Retrieve <sys_file>(fileid); var data = Broker.Retrieve <wechat_news_material>("SELECT * FROM wechat_news_material WHERE fileid = @id", new Dictionary <string, object>() { { "@id", fileid } }); if (data == null) { var stream = ServiceContainer.Resolve <IStoreStrategy>(StoreConfig.Config.Type).GetStream(fileid); data = new wechat_news_material() { Id = Guid.NewGuid().ToString(), fileid = fileid }; data.media_url = WeChatApi.UploadImg(stream, file.name, file.content_type)?.url; data.local_url = SysFileService.GetDownloadUrl(fileid, false); CreateData(data); } return(data.media_url); }
public void Execute(PersistBrokerPluginContext context) { var entity = context.Entity as wechat_material; switch (context.Action) { case EntityAction.PreCreate: case EntityAction.PreUpdate: // 如果素材未上传到系统,则根据url请求图片保存 if (string.IsNullOrEmpty(entity.sys_fileid)) { var result = HttpUtil.DownloadImage(entity.url, out var contentType); var id = Guid.NewGuid().ToString(); var stream = StreamUtil.BytesToStream(result); var hash_code = SHAUtil.GetFileSHA1(stream); var config = StoreConfig.Config; ServiceContainer.Resolve<IStoreStrategy>(config?.Type).Upload(stream, entity.name, out var filePath); var sysImage = new sys_file() { sys_fileId = id, name = entity.name, real_name = entity.name, hash_code = hash_code, file_type = "wechat_material", content_type = contentType, objectId = entity.Id }; new SysFileService(context.Broker).CreateData(sysImage); entity.sys_fileid = id; entity.local_url = SysFileService.GetDownloadUrl(id); } break; case EntityAction.PreDelete: WeChatApi.DeleteMaterial(entity.GetAttributeValue<string>("media_id")); context.Broker.Delete("sys_file", entity.GetAttributeValue<string>("sys_fileid")); break; default: break; } }