/// <summary> /// 上传计划附件 /// </summary> /// <param name="UpFileInfo">该文件信息</param> /// <param name="PostFileStream">该文件流</param> /// <param name="PostFileKey">供服务器索引使用的Key。如服务器不使用之,可以为空</param> /// <param name="PostFileName">用于告诉服务器指定文件的名称。如服务器不使用之,可以为空</param> /// <param name="showUploadProgress">上传进度</param> /// <returns></returns> public static async Task <ExcuteResult> UpLoadFileInfo(Lib.PlanFileEntity UpFileInfo, Stream PostFileStream, string PostFileKey = null, string PostFileName = null, ProgressMessageHandler showUploadProgress = null) { MultipartFormDataContent V_MultFormDatas = DataApiRepository.SetFormData(UpFileInfo, PostFileStream, PostFileKey, PostFileName); ExcuteResult JsonResult = await DataApiRepository.PostApiUriAsync(_ApiUrlBase + "PlanFile/UpLoadFile", V_MultFormDatas, showUploadProgress).ConfigureAwait(false); return(JsonResult); }
/// <summary> /// 下载文件。成功:返回下载后的文件名及路径,失败:返回null /// </summary> /// <param name="WillDownFile">将下载的文件信息</param> /// <param name="ReDownLoad">是否重新下载,默认为false</param> /// <param name="showDownProgress">显示下载进度的委托方法,可为空</param> /// <returns>返回下载成功的文件目录(包括路径)</returns> public static async Task <string> DownloadFile(Lib.PlanFileEntity WillDownFile, bool ReDownLoad = false, ProgressMessageHandler showDownProgress = null) { //合成目录 string tempFileDir = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownFiles", WillDownFile.ContentType); //合成目录+文件 string tempFilePath = System.IO.Path.Combine(tempFileDir, WillDownFile.Name + "(" + WillDownFile.Id + ")" + WillDownFile.ExtendName); if (!File.Exists(tempFilePath) || ReDownLoad) { HttpResponseMessage httpResponseMessage = await DataApiRepository.GetApiUri <HttpResponseMessage>(_ApiUrlBase + @"PlanFile/DownloadFile/" + WillDownFile.Id, showDownProgress).ConfigureAwait(false); if (httpResponseMessage != null && httpResponseMessage.StatusCode != System.Net.HttpStatusCode.NotFound) { Stream responseStream = await httpResponseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false); //以上两句代码不能用下一句代替,否则进度报告出现卡顿。 //Stream responseStream = await DataApiRepository.GetApiUri<Stream>(AppSettings.ApiUrlBase + @"FileDown/" + WillDownFile.Id, showDownProgress); if (responseStream != null && responseStream.Length > 0) { if (!System.IO.Directory.Exists(tempFileDir)) { //创建目录 System.IO.Directory.CreateDirectory(tempFileDir); } //创建一个文件流 FileStream fileStream = new FileStream(tempFilePath, FileMode.Create); //await responseStream.CopyToAsync(fileStream); byte[] buffer = new byte[2048]; int readLength; while ((readLength = await responseStream.ReadAsync(buffer, 0, buffer.Length)) != 0) { // 写入到文件 fileStream.Write(buffer, 0, readLength); } responseStream.Close(); fileStream.Close(); } } } if (File.Exists(tempFilePath)) { return(tempFilePath); } else { return(null); } }
/// <summary> /// 删除文件 /// </summary> /// <param name="DelFile">预删除的文件</param> /// <returns></returns> public static async Task <ExcuteResult> DeleteFileInfo(Lib.PlanFileEntity DelFile) { ExcuteResult JsonResult = await DataApiRepository.DeleteApiUri <ExcuteResult>(_ApiUrlBase + "PlanFile/?FileId=" + DelFile.Id).ConfigureAwait(false); return(JsonResult); }
/// <summary> /// 更新文件信息(采用PUT) /// </summary> /// <param name="UpdatePlan"></param> /// <returns></returns> public static async Task <ExcuteResult> UpdateFileInfo(Lib.PlanFileEntity PEntity) { ExcuteResult JsonResult = await DataApiRepository.PutApiUriAsync(_ApiUrlBase + "PlanFile", PEntity).ConfigureAwait(false); return(JsonResult); }