Пример #1
0
        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);
        }
Пример #2
0
        /// <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
                {
                }
            }
        }
Пример #3
0
		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;
		}