【问题标题】:Check if Download Link Works in Email检查下载链接是否在电子邮件中有效
【发布时间】:2020-08-04 08:56:04
【问题描述】:

我正在创建一封电子邮件,它将发送指向 Azure Blob 容器中 PDF 的链接。我还在链接上玩时间限制,所以它在 30 天后将不再起作用。这是我创建天蓝色链接和电子邮件的代码的样子:

// Establishes a connection with Azure.
            string storageConnection = CloudConfigurationManager.GetSetting("AzureBlobConnectionString");
            CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(storageConnection);

            // Gets access to the quote blob container.
            CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("quotes");
            cloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType.Blob);

            // Inserts the pdf into Azure Blob.
            CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("Quote_" + orderId + "_" + DateTime.Now.ToString("yyyy_MM_dd") + ".pdf"); ;
            await cloudBlockBlob.UploadFromStreamAsync(report.ExportToStream(ExportFormatType.PortableDocFormat));

            // Creates the 30 day time limit to access the pdf.
            DateTime expirationDate = DateTime.UtcNow.Add(new TimeSpan(30, 0, 0, 0));
            SharedAccessBlobPolicy sharedAccessBlobPolicy = new SharedAccessBlobPolicy();
            sharedAccessBlobPolicy.SharedAccessExpiryTime = expirationDate;
            sharedAccessBlobPolicy.Permissions = SharedAccessBlobPermissions.Read;

            // Creates the uri with the time limit.
            string sharedAccesSignature = cloudBlockBlob.GetSharedAccessSignature(sharedAccessBlobPolicy);
            string uri = cloudBlockBlob.Uri.AbsoluteUri + sharedAccesSignature;

            StringBuilder messageBody = new StringBuilder();
            messageBody.Append("Your Quote is attached.<br /><br />");
            if (additionalNotes.Replace(" ", "").Length > 0)
            {
                messageBody.Append("Addtional Notes:<br />");
                messageBody.Append(additionalNotes + "<br /><br />");
            }
            messageBody.Append("<a href=\"" + uri + "\" download=\"MyGoogleLogo\">Download Quote PDF</a><br />");
            messageBody.Append("<b>*** Link will expire after 30 days (" + expirationDate.ToString("MM/dd/yyyy") + ") ***</b><br /><br />");
            messageBody.Append("<b>Please do not reply back to this email.</b>");

如果用户在时间限制后点击链接,是否有办法将用户重定向到设计的错误页面?

【问题讨论】:

  • 您的问题解决了吗?不知道我的回答对你有帮助吗?

标签: javascript c# html azure-blob-storage


【解决方案1】:

您可以在 Azure Blobs 中设置静态页面。

您可以参考offical document 来创建包含时间限制逻辑的下载页面。如果链接没有过期,请下载它,如果过期,跳转到您的自定义错误页面。

您可以上传您的DownloadPage.html,并修改代码。 uri的值设置为https://pan**storage.blob.core.windows.net/asset-*****-4baf-48a5-9ea1-6cb09319e679/DownloadPage.html?downloadurl=XXXXXXXX&amp;expirationDate=2020-05-22 15:40:30

messageBody.Append("<a href=\"" + uri + "\" download=\"MyGoogleLogo\">Download Quote PDF</a><br />");

DownloadPage.html中,可以通过参数expirationDate查看链接是否过期。

这只是一个建议,当然你也可以使用自己的应用网站进行更好的逻辑处理。

【讨论】:

  • 设置静态网站是否只对 $web 容器有效?
  • @Lotzi11 任何知道此页面 URL 的人都可以访问它,不仅适用于 $web 容器。
  • 好的。我让它工作并实施。感谢您的帮助。
猜你喜欢
  • 2011-10-07
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2018-01-31
  • 2012-12-09
相关资源
最近更新 更多