繁体   English   中英

FileUpload文件到Azure Blob存储

[英]FileUpload file to Azure Blob Storage

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

它从“代码隐藏”页面传递到公共库以管理Azure函数:

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

我的问题:

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

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

这是获取已上传文件并将其保存到Azure Blog Storage的最佳方法吗?

最好的方法取决于您的用例。 如果只是小文件,则可以。 如果要支持大文件,则可能需要分块上传。 您可以占用1兆字节的块,可以分别上传或并行上传。 完成所有块的上传后,您将提交文件,并将其在Azure Blob存储中一起存储。 查看CloudBlockBlob.PutBlockCloudBlockBlob.PutBlockList

我是否正确处理了Stream? 我正在传递ByRef,并在用法周围有一个Using语句。

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

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

如果您要上传要嵌入HTML的文件,则最好使用内容类型。 如果您想将指向文件的链接作为下载链接,则不必这样做。 虽然永远不会伤害。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM