private void DownloadFile(int attachment_id, HttpContext context) { var mail_box_manager = new MailBoxManager(0); var auth = context.Request[FilesLinkUtility.AuthKey]; var open_temp_stream = false; if (!string.IsNullOrEmpty(auth)) { var stream = context.Request.QueryString["stream"]; if (!string.IsNullOrEmpty(stream)) { int validate_timespan; int.TryParse(WebConfigurationManager.AppSettings["files.stream-url-minute"], out validate_timespan); if (validate_timespan <= 0) validate_timespan = 5; var validate_result = EmailValidationKeyProvider.ValidateEmailKey(attachment_id + stream, auth, TimeSpan.FromMinutes(validate_timespan)); if (validate_result != EmailValidationKeyProvider.ValidationResult.Ok) { var exc = new HttpException((int)HttpStatusCode.Forbidden, "You don't have enough permission to perform the operation"); //Global.Logger.Error(string.Format("{0} {1}: {2}", CommonLinkUtility.AuthKey, validateResult, context.Request.Url), exc); throw exc; } open_temp_stream = true; } } using (var file = open_temp_stream ? mail_box_manager.GetAttachmentStream(attachment_id, TenantId) : mail_box_manager.GetAttachmentStream(attachment_id, TenantId, Username)) { context.Response.AddHeader("Content-Disposition", ContentDispositionUtil.GetHeaderValue(file.FileName)); file.FileStream.StreamCopyTo(context.Response.OutputStream); } }
private void DownloadAllZipped(int message_id, HttpContext context) { var mail_box_manager = new MailBoxManager(ConfigurationManager.ConnectionStrings["mail"], 0); var attachments = mail_box_manager.GetMessageAttachments(TenantId, Username, message_id); if (attachments.Any()) { using (var zip = new ZipFile()) { zip.CompressionLevel = CompressionLevel.Level3; zip.AlternateEncodingUsage = ZipOption.AsNecessary; zip.AlternateEncoding = Encoding.GetEncoding(Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage); foreach (var attachment in attachments) { using (var file = mail_box_manager.GetAttachmentStream(attachment)) { var filename = file.FileName; if (zip.ContainsEntry(filename)) { var counter = 1; var temp_name = filename; while (zip.ContainsEntry(temp_name)) { temp_name = filename; var suffix = " (" + counter + ")"; temp_name = 0 < temp_name.IndexOf('.') ? temp_name.Insert(temp_name.LastIndexOf('.'), suffix) : temp_name + suffix; counter++; } filename = temp_name; } zip.AddEntry(filename, file.FileStream.GetCorrectBuffer()); } } context.Response.AddHeader("Content-Disposition", ContentDispositionUtil.GetHeaderValue(ARCHIVE_NAME)); zip.Save(context.Response.OutputStream); } } }