【问题标题】:Sample vb.net code to upload file to Amazon S3 storage将文件上传到 Amazon S3 存储的示例 vb.net 代码
【发布时间】:2014-02-21 02:45:17
【问题描述】:

我正在寻找将文件上传到 Amazon S3 存储的示例 vb.net 项目。

我很乐意使用任何官方的 Amazon API,但不想使用第三方产品。

问候, 利

【问题讨论】:

    标签: vb.net file file-upload upload amazon-s3


    【解决方案1】:

    上次我检查时,我在 CodeProject 上发现了很多有用的信息:Beginning with Amazon S3 by StormSpirit Team

    它在 C# 中,但您可以使用在线转换器轻松将其转换为 VB.NET,即 @ 987654322@

    【讨论】:

      【解决方案2】:

      聚会有点晚了,但这是我用来处理 Amazon S3 存储的一个类。它将处理您尝试完成的与 S3 上的文件有关的任何事情。

      Imports Amazon.S3
      Imports Amazon.S3.Model
      Imports Amazon.Runtime
      Imports Amazon
      Imports Amazon.S3.Util
      Imports System.Collections.ObjectModel
      Imports System.IO
      
      Public Class AWS_S3
      
          Const AWS_ACCESS_KEY As String = <your access key>
          Const AWS_SECRET_KEY As String = <your secret access key>
      
      
      Private Property s3Client As IAmazonS3
      'Usage for This Class
      '
      '       CreateABucket("<bucketname>") returns: empty string if successful/ error message if failed
      '         Bucket name should conform with DNS requirements: 
      '         - Should not contain uppercase characters
      '         - Should not contain underscores (_)
      '         - Should be between 3 and 63 characters long
      '         - Should not end with a dash
      '         - Cannot contain two, adjacent periods
      '         - Cannot contain dashes next to periods (e.g., "my-.bucket.com" and "my.-bucket" are invalid)
      '       CreateFolder("<bucketname>", "<foldername>")  returns: empty string if successful/ error message if failed
      '         Follow same rules as above
      '       AddFileToFolder("<filename>", "<bucketname>", "<foldername>") returns: empty string if successful/ error message if failed
      '       ListingFiles("<bucketname>", "<foldername>") return observable collection(of String) - empty collection if errors
      '       DeleteFileFromFolder("<bucketname>", "<foldername>, <filename>) returns: empty string if successful/ error message if failed
      '       GetFileFromFolder("<bucketname>", "<foldername>", <filename>, <target>) returns: empty string if successful/ error message if failed
      
      Sub New()
          Try
              s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
          Catch ex As Exception
      
          End Try
      
      End Sub
      '''<summary>
      '''       CreateABucket("<bucketname>") returns: empty string if successful/ error message if failed
      '''         Bucket name should conform with DNS requirements: 
      '''         - Should not contain uppercase characters
      '''         - Should not contain underscores (_)
      '''         - Should be between 3 and 63 characters long
      '''         - Should not end with a dash
      '''         - Cannot contain two, adjacent periods
      '''         - Cannot contain dashes next to periods (e.g., "my-.bucket.com" and "my.-bucket" are invalid)
      ''' </summary>
          Public Function CreateABucket(bucketName As String) As String  'parameter : client As IAmazonS3
          Dim returnval As String = ""
          Try
              Try
                  Dim putRequest1 As PutBucketRequest = New PutBucketRequest() With {.BucketName = bucketName, .UseClientRegion = True}
                  Dim response1 As PutBucketResponse = s3Client.PutBucket(putRequest1)
              Catch amazonS3Exception As AmazonS3Exception
                  If amazonS3Exception.ErrorCode = "BucketAlreadyOwnedByYou" Then
                      returnval = "Bucket already exists"
                  Else
                      If (Not IsNothing(amazonS3Exception.ErrorCode) And amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")) Or amazonS3Exception.ErrorCode.Equals("InvalidSecurity") Then
                          returnval = "Check the provided AWS Credentials."
                      Else
                          returnval = String.Format("Error occurred. Message:'{0}' when writing an object", amazonS3Exception.Message)
                      End If
                  End If
              End Try
          Catch ex As Exception
              returnval = ""
          End Try
          Return returnval
        End Function
          Public Function CreateFolder(bucketName As String, folderName() As String) As String
          Dim returnval As String = ""
          Try
              Try
                  Dim folderKey As String = ""
                  If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                      returnval = "Bucket does not exist"
                  Else
                      For i = 0 To folderName.Length - 1
                          folderKey += folderName(i) & "/"
      
                      Next
                      ' folderKey = folderKey & "/"    'end the folder name with "/"
                      Dim request As PutObjectRequest = New PutObjectRequest()
                      request.BucketName = bucketName
                      request.StorageClass = S3StorageClass.Standard
                      request.ServerSideEncryptionMethod = ServerSideEncryptionMethod.None
                      ' request.CannedACL = S3CannedACL.BucketOwnerFullControl
                      request.Key = folderKey
                      request.ContentBody = String.Empty
                      s3Client.PutObject(request)
                  End If
              Catch ex As Exception
                  returnval = ex.Message
              End Try
          Catch ex As AmazonS3Exception
              returnval = ex.Message
          End Try
          Return returnval
          End Function
          Public Function AddFileToFolder(FileName As String, bucketName As String, folderName As String) As String
          Dim returnval As String = ""
          Try
              Try
                  If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                      Dim fname() As String = folderName.Split("/")
                      CreateFolder(bucketName, fname)
                  Else
                      Dim path As String = FileName
                      Dim file As FileInfo = New FileInfo(path)
      
                      Dim key As String = String.Format("{0}/{1}", folderName, file.Name)
                      Dim por As PutObjectRequest = New PutObjectRequest()
                      por.BucketName = bucketName
                      por.StorageClass = S3StorageClass.Standard
                      por.ServerSideEncryptionMethod = ServerSideEncryptionMethod.None
                      por.CannedACL = S3CannedACL.PublicRead
                      por.Key = key
                      por.InputStream = file.OpenRead()
                      s3Client.PutObject(por)
                  End If
              Catch ex As Exception
                  returnval = ex.Message
              End Try
          Catch ex As AmazonS3Exception
              returnval = ex.Message
          End Try
          Return returnval
      End Function
      
      Public Function ListingFiles(bucketName As String, Optional foldername As String = "/") As ObservableCollection(Of String)
          Dim obsv As New ObservableCollection(Of String)
          Dim delimiter As String = "/"
          If Not foldername.EndsWith(delimiter) Then
              foldername = String.Format("{0}{1}", foldername, delimiter)
          End If
          Try
              Try
                  Dim request As New ListObjectsRequest() With {.BucketName = bucketName}
                  Do
                      Dim response As ListObjectsResponse = s3Client.ListObjects(request)
                      For i As Integer = 1 To response.S3Objects.Count - 1
                          Dim entry As S3Object = response.S3Objects(i)
                          If Not foldername = "/" Then
                              If entry.Key.ToString.StartsWith(foldername) Then
                                  Dim replacementstring As String = Replace(entry.Key, foldername, "")
                                  If Not replacementstring = "" Then
                                      obsv.Add(replacementstring)
                                  End If
                              End If
                          Else
                              obsv.Add(Replace(entry.Key, foldername, ""))
                          End If
                      Next
                      If (response.IsTruncated) Then
                          request.Marker = response.NextMarker
                      Else
                          request = Nothing
                      End If
                  Loop Until IsNothing(request)
              Catch ex As AmazonS3Exception
      
              End Try
          Catch ex As Exception
      
          End Try
          Return obsv
      End Function
      Public Function DeleteFileFromFolder(bucketName As String, foldername As String, keyname As String) As String
          Dim returnval As String = ""
          Try
              Try
                  If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                      returnval = "Bucket does not exist"
                  Else
                      foldername = foldername.Replace("\", "/")
                      Dim dor As DeleteObjectRequest = New DeleteObjectRequest() With {.BucketName = bucketName, .Key = String.Format("{0}/{1}", foldername, keyname)}
                      s3Client.DeleteObject(dor)
                  End If
              Catch ex As AmazonS3Exception
                  returnval = ex.Message
              End Try
          Catch ex As Exception
              returnval = ex.Message
          End Try
          Return returnval
      End Function
      
      Public Function DeleteFolder(bucketName As String, foldername As String) As Boolean
              Try
                  If Not foldername.EndsWith("/") Then
                      foldername = foldername & "/"
                  End If
                  Dim dor As DeleteObjectRequest = New DeleteObjectRequest() With {.BucketName = bucketName, .Key = foldername}
                  s3Client.DeleteObject(dor)
                  Return True
              Catch ex As AmazonS3Exception
                  Return False
              End Try
      
      End Function
      Public Function GetFileFromFolder(bucketName As String, folderName As String, FileName As String, target As String) As String
          Dim returnval As String = ""
          Try
              Try
                  If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                      returnval = "Bucket does not exist"
                  Else
                      Dim request As ListObjectsRequest = New ListObjectsRequest() With {.BucketName = bucketName}
                      Do
                          Dim response As ListObjectsResponse = s3Client.ListObjects(request)
                          For i As Integer = 1 To response.S3Objects.Count - 1
                              Dim entry As S3Object = response.S3Objects(i)
                              If Replace(entry.Key, folderName & "/", "") = FileName Then
                                  Dim objRequest As GetObjectRequest = New GetObjectRequest() With {.BucketName = bucketName, .Key = entry.Key}
                                  Dim objResponse As GetObjectResponse = s3Client.GetObject(objRequest)
                                  objResponse.WriteResponseStreamToFile(target & FileName)
                                  Exit Do
                              End If
                          Next
                          If (response.IsTruncated) Then
                              request.Marker = response.NextMarker
                          Else
                              request = Nothing
                          End If
                      Loop Until IsNothing(request)
                  End If
              Catch ex As AmazonS3Exception
                  returnval = ex.Message
              End Try
          Catch ex As Exception
              returnval = ex.Message
          End Try
          Return returnval
      End Function
      
      Public Function OpenFile(bucketName As String, folderName As String, FileName As String) As String
          Dim returnval As String = DownloadFile(bucketName, folderName, FileName)
          If returnval = "" Then
              Dim target As String = Path.GetTempPath()
              System.Diagnostics.Process.Start(target & FileName)
          End If
          Return returnval
      End Function
      Public Function CopyingObject(bucketName As String, folderFile As String, destinationfolder As String) As String
          Dim returnval As String = ""
          Try
              Using s3Client
                  Dim request As CopyObjectRequest = New CopyObjectRequest
                  request.SourceBucket = bucketName
                  request.SourceKey = folderFile.Replace("\", "/")
                  request.DestinationBucket = bucketName
                  request.DestinationKey = destinationfolder.Replace("\", "/")
      
                  Dim response As CopyObjectResponse = s3Client.CopyObject(request)
              End Using
          Catch s3Exception As AmazonS3Exception
              returnval = s3Exception.Message
          End Try
          Return returnval
      
      End Function
      Public Function DownloadFile(bucketName As String, folderName As String, FileName As String) As String
          Dim target As String = Path.GetTempPath()
          Dim returnval As String = ""
          folderName = folderName.Replace("\", "/")
          Try
              Try
                  If Not AmazonS3Util.DoesS3BucketExist(s3Client, bucketName) Then
                      returnval = "Bucket does not exist"
                  Else
                      Dim request As ListObjectsRequest = New ListObjectsRequest() With {.BucketName = bucketName}
                      Do
                          Dim response As ListObjectsResponse = s3Client.ListObjects(request)
                          For i As Integer = 1 To response.S3Objects.Count - 1
                              Dim entry As S3Object = response.S3Objects(i)
                              If Replace(entry.Key, folderName & "/", "") = FileName Then
                                  Dim objRequest As GetObjectRequest = New GetObjectRequest() With {.BucketName = bucketName, .Key = entry.Key}
                                  Dim objResponse As GetObjectResponse = s3Client.GetObject(objRequest)
                                  objResponse.WriteResponseStreamToFile(target & FileName)
                                  Exit Do
                              End If
                          Next
                          If (response.IsTruncated) Then
                              request.Marker = response.NextMarker
                          Else
                              request = Nothing
                          End If
                      Loop Until IsNothing(request)
                  End If
              Catch ex As AmazonS3Exception
                  returnval = ex.Message
              End Try
          Catch ex As Exception
              returnval = ex.Message
          End Try
          Return returnval
      End Function
      
      End Class
      

      这个类的用法:

      创建存储桶

       Dim aws As New AWS_S3
      
        aws.CreateABucket(<bucketname>) 
      

      创建文件夹 将 fld(1) 作为字符串调暗

                      fld(0) = <foldername>
                      fld(1) = <subfoldername>
                      'List each sub folder as an element in array
      
                      Dim rtrn As String = aws.CreateFolder(<bucketname>, fld)
      

      将文件添加到文件夹

                      Dim fld(1) As String                 
                      fld(0) = <foldername>
                      fld(1) = <subfoldername>
                      'List each sub folder as an element in array
                      Dim rtrn As String = aws.AddFileToFolder(<local file name>, 
      <bucketname>, fld)
      

      列出文件夹中的文件

                       Dim filecol As ObservableCollection(Of String) = aws.ListingFiles(<bucketname>, <foldername>) ...(foldername should end with a "/")
      

      【讨论】:

        猜你喜欢
        • 2018-04-04
        • 2015-05-05
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        • 2013-09-09
        • 2015-10-28
        • 1970-01-01
        相关资源
        最近更新 更多