public static FileDownloadInfo CollectInfoFromRequest() { FileDownloadInfo info = new FileDownloadInfo(); info.RequestContext = WebUtility.GetRequestQueryValue("requestContext", string.Empty); info.FilePath = WebUtility.GetRequestQueryValue("filePath", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.FilePath, "filePath"); info.UserID = WebUtility.GetRequestQueryValue("userID", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.UserID, "userID"); info.PathType = WebUtility.GetRequestQueryValue("pathType", PathType.relative); info.FileName = WebUtility.GetRequestQueryValue("fileName", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.FileName, "fileName"); info.RootPathName = HttpUtility.UrlEncode(WebUtility.GetRequestQueryValue <string>("rootPathName", string.Empty)); ExceptionHelper.CheckStringIsNullOrEmpty(info.RootPathName, "rootPathName"); info.FileFullPath = FileUpload.GetFileFullPath(info.PathType, info.RootPathName, info.FilePath); info.DownloadType = WebUtility.GetRequestQueryValue("opType", DownloadTypeDefine.Document); return(info); }
/// <summary> /// 下载模板或已存在的文件 /// </summary> public static void Download(object sender, BeforeFileDownloadHandler beforeDownloadHandler, PrepareDownloadStreamHandler prepareDownloadStreamHandler, bool raiseEvent) { ObjectContextCache.Instance["FileUploadProcessed"] = true; HttpResponse response = HttpContext.Current.Response; bool fileReadonly = WebUtility.GetRequestQueryValue <bool>("fileReadonly", false); string materialID = string.Empty; try { string controlID = WebUtility.GetRequestQueryValue("controlID", string.Empty); FileDownloadInfo downloadInfo = FileDownloadInfo.CollectInfoFromRequest(); if (File.Exists(downloadInfo.FileFullPath) == false) { //是否需要启用映射机制(归档后,文件根目录的映射) string mappedRootPath = AppPathMappingContext.GetMappedPathName(downloadInfo.RootPathName); downloadInfo.FileFullPath = GetFileFullPath(downloadInfo.PathType, mappedRootPath, downloadInfo.FilePath); } response.ContentType = FileConfigHelper.GetFileContentType(downloadInfo.FileName); materialID = WebUtility.GetRequestQueryValue("materialID", string.Empty); if (materialID.IsNullOrEmpty()) { materialID = UuidHelper.NewUuidString(); } if (fileReadonly) { WebFileOpenMode openMode = FileConfigHelper.GetFileOpenMode(downloadInfo.FileName, downloadInfo.UserID); response.AppendHeader("content-disposition", string.Format("{0};filename={1}", openMode == WebFileOpenMode.Inline ? "inline" : "attachment", response.EncodeFileNameInContentDisposition(downloadInfo.FileName))); } else { string fileIconPath = FileConfigHelper.GetFileIconPath(downloadInfo.FileName); response.AppendHeader("fileIconPath", HttpUtility.UrlEncode("message=" + fileIconPath)); response.AppendHeader("content-disposition", "attachment;fileName=" + response.EncodeFileNameInContentDisposition(downloadInfo.FileName)); if (downloadInfo.PathType != PathType.relative) { response.AppendHeader("materialID", "message=" + materialID); } } bool responseFile = true; if (beforeDownloadHandler != null && raiseEvent) { responseFile = beforeDownloadHandler(sender, downloadInfo); } if (responseFile) { IMaterialContentPersistManager persistManager = GetMaterialContentPersistManager(materialID, new FileInfo(downloadInfo.FileFullPath)); using (Stream stream = persistManager.GetMaterialContent(materialID)) { if (prepareDownloadStreamHandler != null && raiseEvent) { PrepareDownloadStreamEventArgs args = new PrepareDownloadStreamEventArgs(); args.DownloadInfo = downloadInfo; args.InputStream = stream; args.OutputStream = response.OutputStream; prepareDownloadStreamHandler(sender, args); } else { stream.CopyTo(response.OutputStream); } } } Control control = null; if (controlID.IsNotEmpty()) { control = WebControlUtility.FindControlByID((Page)HttpContext.Current.CurrentHandler, controlID, true); } if (control != null && control is MaterialControl) { DownloadEventArgs args = new DownloadEventArgs(materialID, downloadInfo.FilePath); ((MaterialControl)control).OnDownloadFile(args); } } catch (Exception ex) { if (fileReadonly) { response.Write(ex.Message); } else { GenerateErrorInformation(ex.ToString()); } } finally { try { response.End(); } catch { } } }
public static FileDownloadInfo CollectInfoFromRequest() { FileDownloadInfo info = new FileDownloadInfo(); info.RequestContext = WebUtility.GetRequestQueryValue("requestContext", string.Empty); info.FilePath = WebUtility.GetRequestQueryValue("filePath", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.FilePath, "filePath"); info.UserID = WebUtility.GetRequestQueryValue("userID", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.UserID, "userID"); info.PathType = WebUtility.GetRequestQueryValue("pathType", PathType.relative); info.FileName = WebUtility.GetRequestQueryValue("fileName", string.Empty); ExceptionHelper.CheckStringIsNullOrEmpty(info.FileName, "fileName"); info.RootPathName = HttpUtility.UrlEncode(WebUtility.GetRequestQueryValue<string>("rootPathName", string.Empty)); ExceptionHelper.CheckStringIsNullOrEmpty(info.RootPathName, "rootPathName"); info.FileFullPath = FileUpload.GetFileFullPath(info.PathType, info.RootPathName, info.FilePath); info.DownloadType = WebUtility.GetRequestQueryValue("opType", DownloadTypeDefine.Document); return info; }