我有一个System.Web.UI.WebControls.FileUpload控件,它传递需要存储在Azure Blob存储中的Word和PDF文件。
从Code Behind页面,它将传递到公共库以管理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
我的问题:
注意,我通常使用C#编写代码,因此如果您不熟悉VB.NET,C#中的示例就可以了。
答案 0 :(得分:4)
这是获取已上传文件并保存的最佳方式 到Azure博客存储?
最好的方法取决于您的用例。如果它只是小文件你就可以了。如果您想支持大型文件,可能需要进行分块上传。您可以使用1兆字节的块,您可以单独或并行上传。完成上传您提交文件的所有块后,它将在Azure Blob存储中拼接在一起。查看CloudBlockBlob.PutBlock和CloudBlockBlob.PutBlockList。
我是否正确处理了Stream?我正在通过ByRef并有一个使用 关于用法的声明。
您可能但是如果您想支持更大的文件,您可能希望使用JavaScript上传并创建两个端点来接收块并在发送所有块后提交。有多个库可以帮助您。
在将内容保存到存储时,是否应该明确设置内容类型?如果是这样 我怎么做?
如果您上传要嵌入HTML的文件,那么拥有内容类型是明智之举。如果您希望文件的链接是您不必的下载链接。虽然它永远不会受到伤害。
blockBlob.Properties.ContentType = "image/jpeg";