public ActionResult DownloadQueueWithMediaId() { FileDownloadQueueWithMediaIdArgs args = RequestArgs <FileDownloadQueueWithMediaIdArgs>(); if (args == null) { return(RespondResult(false, "参数无效。")); } //_fileDownloadQueue.ServerRootDir = Server.MapPath("/"); //DomainContext domainContext = _fileDomainPool.GetDomainContext(args.Domain); FileDownloadQueueEntity item = new FileDownloadQueueEntity(); item.Domain = args.Domain; item.AppId = args.AppId; item.CreateTime = DateTime.Now; item.MediaId = args.MediaId; item.CallbackUrl = args.CallbackUrl; item.Tag = args.Tag; _fileDownloadQueue.Enqueue(item); return(RespondResult()); }
public void Enqueue(FileDownloadQueueEntity item) { if (item == null) { _log.Write("FileDownloadQueueEntity == null", String.Empty, TraceEventType.Warning); return; } _dataBase.Insert(item); }
private void Download(FileDownloadQueueEntity item) { _log.Write("下载队列中的文件", JsonConvert.SerializeObject(item), TraceEventType.Verbose); DomainContext domainContext = _fileDomainPool.GetDomainContext(item.Domain); if (domainContext == null) { item.Status = FileDownloadQueueItemStatus.Done; item.Success = false; item.Message = "无效域"; item.FinishTime = DateTime.Now; _dataBase.Update(item); return; } string targetDir = Path.Combine(_serverRootDir, "FileStore", item.Domain.ToString()); if (Directory.Exists(targetDir) == false) { Directory.CreateDirectory(targetDir); } string accessToken = domainContext.AccessToken; HttpDownloadArgs downloadArgs = new HttpDownloadArgs(); downloadArgs.Url = String.Format( "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}", accessToken, item.MediaId); downloadArgs.TargetDir = targetDir; HttpDownloadResult downloadResult = _httpService.Download(downloadArgs); if (downloadResult.Success == false) { item.Status = FileDownloadQueueItemStatus.Done; item.Success = false; item.Message = "下载失败:" + downloadResult.Message; item.FinishTime = DateTime.Now; _dataBase.Update(item); return; } item.Status = FileDownloadQueueItemStatus.Done; item.Success = downloadResult.Success; item.Message = downloadResult.Message; item.OutputFile = String.Format("FileStore/{0}/{1}", item.Domain, downloadResult.StoreFileName); item.ContentType = downloadResult.ContentType; item.FileLength = (int)(downloadResult.FileLength / 1024); FileDownloadQueueWithMediaIdResult result = new FileDownloadQueueWithMediaIdResult(); result.Success = item.Success; result.Message = item.Message; result.OutputFile = item.OutputFile; result.ContentType = item.ContentType; result.Tag = item.Tag; result.MediaId = item.MediaId; result.FileLength = item.FileLength; _log.Write("下载队列中的文件返回(WithMediaId)", JsonConvert.SerializeObject(result), TraceEventType.Verbose); //把下载结果POST到回调地址上 HttpRequestArgs requestArgs = new HttpRequestArgs(); requestArgs.Method = "POST"; requestArgs.Url = item.CallbackUrl; requestArgs.Content = JsonConvert.SerializeObject(result); HttpRequestResult requestResult = _httpService.Request(requestArgs); if (requestResult.Success) { ApiResult callbackApiResult = JsonConvert.DeserializeObject <ApiResult>(requestResult.Content); if (callbackApiResult.Success == false) { item.Status = FileDownloadQueueItemStatus.Done; item.Success = false; item.Message = "回调失败:" + callbackApiResult.Message; item.FinishTime = DateTime.Now; } } else { item.Status = FileDownloadQueueItemStatus.Done; item.Success = false; item.Message = "回调失败:" + requestResult.Exception.Message; item.FinishTime = DateTime.Now; } _dataBase.Update(item); }