title: Rapidshare API upload file
body: <p>I trying to upload to Rapidshare using the API documentation. I already seen a lot of article but still I was not able to get it "Done". Currently I keep on getting the following response error:</p>
  
  <blockquote>
    <p>ERROR: Subroutine invalid. (b6ba5d82)</p>
  </blockquote>
  
  <p>I used the following documentation: </p>
  
  <p><a href="http://images.rapidshare.com/apidoc.txt" rel="nofollow noreferrer">http://images.rapidshare.com/apidoc.txt</a></p>
  
  <p>and also used an example I found on stackoverflow:</p>
  
  <p><a href="https://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data/2996904#2996904">Upload files with HTTPWebrequest (multipart/form-data)</a></p>
  
  <p>I am using the following code:</p>
  
  <pre><code>Sub Main
      Dim freeurl As String = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver"
      Dim req As WebRequest = WebRequest.Create(freeurl)
      Dim response = req.GetResponse().GetResponseStream()
      Dim reader As New StreamReader(response)
      Dim nextfreeserver = reader.ReadToEnd()
      req = Nothing
      response = Nothing
      reader= Nothing 
  
      Dim login As String = "********"
      Dim password As String = "********"
      Dim filename As string = "test12345.txt"
      Dim filepath = "C:\Users\Public\Documents\" &amp; filename
  
      Dim uploadurl As String = "https://rs" &amp; nextfreeserver &amp; ".rapidshare.com/cgi-bin/rsapi.cgi?sub=upload"
      uploadurl = uploadurl &amp; "&amp;login=" &amp; login &amp; "&amp;password=" &amp; password &amp; "&amp;filename" &amp; filename &amp; "&amp;filecontent=" &amp; filepath
  
  
  
      Dim nvc As NameValueCollection = new NameValueCollection()
  
      nvc.Add("sub", "upload")
      nvc.Add("login", login)
      nvc.Add("password", password)
  
      Dim resp As String = ""
      resp =  HttpUploadFile("https://rs" &amp; nextfreeserver &amp; ".rapidshare.com/cgi-bin/rsapi.cgi", filepath, "filecontent", "application/octet-stream", nvc)
  
  End Sub
  
  Public Shared Function HttpUploadFile(url As String, file As String, paramName As String, contentType As String, nvc As NameValueCollection) As string
  
      Dim boundary As String = "---------------------------" &amp; DateTime.Now.Ticks.ToString("x")
      Dim boundarybytes As Byte() = System.Text.Encoding.ASCII.GetBytes(vbCr &amp; vbLf &amp; "--" &amp; boundary &amp; vbCr &amp; vbLf)
  
      Dim wr As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
      wr.ContentType = "multipart/form-data; boundary=" &amp; boundary
      wr.Method = "POST"
      wr.KeepAlive = True
      wr.Credentials = System.Net.CredentialCache.DefaultCredentials
  
      Dim rs As Stream = wr.GetRequestStream()
  
      Dim formdataTemplate As String = "Content-Disposition: form-data; name=""{0}""" &amp; vbCr &amp; vbLf &amp; vbCr &amp; vbLf &amp; "{1}"
      For Each key As String In nvc.Keys
          rs.Write(boundarybytes, 0, boundarybytes.Length)
          Dim formitem As String = String.Format(formdataTemplate, key, nvc(key))
          Dim formitembytes As Byte() = System.Text.Encoding.UTF8.GetBytes(formitem)
          rs.Write(formitembytes, 0, formitembytes.Length)
      Next
      rs.Write(boundarybytes, 0, boundarybytes.Length)
  
      Dim headerTemplate As String = "Content-Disposition: form-data; name=""{0}""; filename=""{1}""" &amp; vbCr &amp; vbLf &amp; "Content-Type: {2}" &amp; vbCr &amp; vbLf &amp; vbCr &amp; vbLf
      Dim header As String = String.Format(headerTemplate, paramName, file, contentType)
      Dim headerbytes As Byte() = System.Text.Encoding.UTF8.GetBytes(header)
      rs.Write(headerbytes, 0, headerbytes.Length)
  
      Dim fileStream As New FileStream(file, FileMode.Open, FileAccess.Read)
      Dim buffer As Byte() = New Byte(4095) {}
      Dim bytesRead As Integer = 0
      While (InlineAssignHelper(bytesRead, fileStream.Read(buffer, 0, buffer.Length))) &lt;&gt; 0
          rs.Write(buffer, 0, bytesRead)
      End While
      fileStream.Close()
  
      Dim trailer As Byte() = System.Text.Encoding.ASCII.GetBytes(vbCr &amp; vbLf &amp; "--" &amp; boundary &amp; "--" &amp; vbCr &amp; vbLf)
      rs.Write(trailer, 0, trailer.Length)
      rs.Close()
  
      Dim wresp As WebResponse = Nothing
      Try
          wresp = wr.GetResponse()
  
          Dim stream2 As Stream = wresp.GetResponseStream()
          Dim reader2 As New StreamReader(stream2)
          return reader2.ReadToEnd()
  
  
          If wresp IsNot Nothing Then
              wresp.Close()
              wresp = Nothing
          End If
      Finally
          wr = Nothing
      End Try
  End Function    
  
  Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
     target = value
     Return value
  End Function
  </code></pre>