title: ASP.net Client Download from AWS S3 File URL
body: <p>For first let me say that asp is a new venture for me and I am finishing up a current project. </p>
  
  <p>So essentially I am building a website that users log in to and get files that are associated with their access privileges. I am used AWS S3 to host the files. One solution that i have worked out is downloading the file to the server and then offering them to the client. The problem is that the user has to wait till the file downloads to the web server and then it will prompt the user to open/save. For small files this is not a bad solution, but there are files that can be 700mb plus. </p>
  
  <p>So I want to generate a URL to that file. I have done this below.</p>
  
  <pre><code>    Public Function GenerateDownLoadURL(keyName As String) As String
      'You would generate a URL if you want to share a file but the AllUsers group does not have read permission to the object.
      'The following exampe creates a URL that is valid for 1 day.
      'Query String Authentication: http://docs.amazonwebservices.com/AmazonS3/latest/S3_QSAuth.html
      'Query String Request Authentication Alternative: http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
      Dim useSSL As Boolean = True
      Dim appConfig As NameValueCollection = ConfigurationManager.AppSettings
      Dim endPoint As String = "s3.amazonaws.com"
      Dim bucket As String = "bucketName"
      Dim dil As String = "/"
      'Dim pre As String = Path
      Dim key As String = appConfig.Get("AWSAccessKey")
      Dim sec As String = appConfig.Get("AWSSecretKey")
      Dim MyS3Helper As New SprightlySoftAWS.S3.Helper
  
      Dim ExpiresURL As String
      'Build Url Expires in 30 min
      ExpiresURL = MyS3Helper.BuildExpiresURL(useSSL, endPoint, bucket, keyName, "", DateAdd(DateInterval.Minute, 30, Now), key, sec)
  
      Return ExpiresURL
  
  End Function
  </code></pre>
  
  <p>The URL Generation works great, but what I want is for the URL to be navigated to in a new client tab/window. As this URL will start the download for the user. And being new to asp.net I'm not really sure how to do this. </p>
  
  <p>I have attempted this like such, but not surprising this does not work. </p>
  
  <pre><code> Public Sub DownloadObject(ByVal keyName As String)
      Dim keySplit() As String = keyName.Split("/"c)
      Dim fileName As String = keySplit(keySplit.Length - 1)
      Dim dest As String = GenerateDownLoadURL(keyName)
  
  
      HttpContext.Current.Response.Clear()
      HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" &amp; fileName)
      HttpContext.Current.Response.ContentType = "application/octet-stream"
      HttpContext.Current.Response.TransmitFile(dest)
      HttpContext.Current.Response.Flush()
      HttpContext.Current.Response.End()
  
  
  End Sub
  </code></pre>
  
  <p>Thank you for your help!!!</p>