FileUpload 文件到 Azure Blob 存储

Posted

技术标签:

【中文标题】FileUpload 文件到 Azure Blob 存储【英文标题】:FileUpload file to Azure Blob Storage 【发布时间】:2018-02-12 03:20:27 【问题描述】:

我有一个 System.Web.UI.WebControls.FileUpload 控件,它传递需要存储在 Azure Blob 存储中的 Word 和 PDF 文件。

从代码隐藏页面传递到公共库以管理 Azure Functions:

Private Sub UploadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UploadButton.Click
    Dim fileExt As String = String.Empty
        Dim newGuid As New Guid
        Dim fileName As String
        Dim documentType As Document.DocumentType

        Page.Validate()

        newGuid = Guid.NewGuid

        If Page.IsValid() AndAlso Me.FileUploadNewDoc.HasFile Then
            Try
                    'Test that MIME is either msword of pdf
                        If FileUploadNewDoc.PostedFile.ContentType.Contains("msword") Then
                            fileExt = "doc"
                            documentType = Document.DocumentType.LeaseWordDoc
                        ElseIf FileUploadNewDoc.PostedFile.ContentType.Contains("pdf") Then
                            fileExt = "pdf"
                            documentType = Document.DocumentType.LeasePDF
                        Else
                            fileExt = "na"
                        End If

                        If fileExt <> "na" Then
                            fileName = newGuid.ToString & "." & fileExt
                            AzureStorage.SaveBlob(FileUploadNewDoc.FileContent, fileName, mDocumentContainer, mStorageConnectionString)

                        End If
                    Catch ex As Exception
                        ' Handle Error
                    Finally
                        FileUploadNewDoc.Dispose()
                    End Try
    End If
End Sub

AzureStorage.SaveBlob 代码:

Public Function SaveBlob(ByRef fileContent As Stream,
                                 ByVal fileName As String, 
                                 ByVal containerName As String, 
                                 ByVal storageConnectionString As String) As Boolean

            Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(storageConnectionString)
            Dim blobClient As CloudBlobClient = storageAccount.CreateCloudBlobClient()
            Dim container As CloudBlobContainer = blobClient.GetContainerReference(containerName)
            Dim blockBlob As CloudBlockBlob = container.GetBlockBlobReference(fileName)

            Using fileContent
                fileContent.Position = 0
                blockBlob.UploadFromStream(fileContent)
            End Using

            Return True
End Function

我的问题:

    这是获取已上传文件并将其保存到 Azure Blob 存储的最佳方式吗? 我是否正确处理了流?我正在传递 ByRef 并有一个围绕用法的 Using 语句。 在将内容保存到存储时是否应该明确设置内容类型?如果是这样,我该怎么做?

注意,我通常使用 C# 编写代码,因此如果您不熟悉 VB.NET,可以使用 C# 编写示例。

【问题讨论】:

【参考方案1】:

这是获取已上传文件并保存的最佳方法吗 到 Azure 博客存储?

最佳方法取决于您的用例。如果它只是小文件,你就可以了。如果您想支持大文件,您可能需要进行分块上传。您可以获取 1 兆字节的块,您可以单独或并行上传这些块。上传完所有块后,您将提交文件并将其拼接在 Azure Blob 存储中。查看CloudBlockBlob.PutBlock 和CloudBlockBlob.PutBlockList。

我是否正确处理了流?我正在通过 ByRef 并有一个 Using 围绕用法的声明。

您是,但如果您想支持更大的文件,您可能需要使用 javascript 上传并创建两个端点来接收块并在发送所有块后提交。有多个库可以帮助您。

将内容保存到存储时是否应该明确设置内容类型?如果是这样的话 我怎么做?

如果您上传要嵌入 html 的文件,最好使用内容类型。如果您希望文件的链接是下载链接,您不必这样做。虽然它永远不会受伤。

blockBlob.Properties.ContentType = "image/jpeg";

【讨论】:

以上是关于FileUpload 文件到 Azure Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章

Azure 函数 Blob 触发器将文件复制到文件共享

恢复文件从用户的机器上传到 Azure Blob 存储和从 Azure Blob 下载文件到用户的机器在 Typescript(angular) 从浏览器

使用 ADF 将 azure blob 文件复制到 azure synapse

使用 node.js 将 Azure 文件共享复制到 Blob

将最新的文件夹从 azure blob 存储加载到 azure 数据工厂

将文件从 Azure 存储 blob 移动到 Ftp 服务器