2017-04-19 9 views
-2

これはポストvb.netポストイメージファイルPHPのリターン0

Public Function sendHttpRequest(url As String, values As NameValueCollection, Optional files As NameValueCollection = Nothing) As String 
    Dim boundary As String = "----------------------------" + DateTime.Now.Ticks.ToString("x") 

    Dim boundaryBytes As Byte() = System.Text.Encoding.UTF8.GetBytes((Convert.ToString(vbCr & vbLf & "--") & boundary) + vbCr & vbLf) 

    Dim trailer As Byte() = System.Text.Encoding.UTF8.GetBytes((Convert.ToString(vbCr & vbLf & "--") & boundary) + "--" & vbCr & vbLf) 

    Dim boundaryBytesF As Byte() = System.Text.Encoding.ASCII.GetBytes((Convert.ToString("--") & boundary) + vbCr & vbLf) 

    Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest) 
    request.ContentType = Convert.ToString("multipart/form-data; boundary=") & boundary 
    request.Method = "POST" 
    request.KeepAlive = True 
    request.Credentials = System.Net.CredentialCache.DefaultCredentials 

    Dim requestStream As Stream = request.GetRequestStream() 

    For Each key As String In values.Keys 

     Dim cntDisp = "Content-Disposition: form-data; name=""{0}"";" & vbCr & vbLf & vbCr & vbLf & "{1}" 
     Dim formItemBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(String.Format(cntDisp, key, values(key))) 
     requestStream.Write(boundaryBytes, 0, boundaryBytes.Length) 
     requestStream.Write(formItemBytes, 0, formItemBytes.Length) 
    Next 

    If files IsNot Nothing Then 
     For Each key As String In files.Keys 
      If File.Exists(files(key)) Then 
       Dim bytesRead As Integer = 0 
       Dim buffer As Byte() = New Byte(2047) {} 
       Dim cnt As String = "Content-Disposition: form-data; name=""{0}""; filename=""{1}""" & vbCr & vbLf 
       Dim cntype As String = "Content-Type: application/octet-stream" & vbCr & vbLf & vbCr & vbLf 
       Dim formItemBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(String.Format(cnt & cntype, key, files(key))) 
       requestStream.Write(boundaryBytes, 0, boundaryBytes.Length) 
       requestStream.Write(formItemBytes, 0, formItemBytes.Length) 

       Using fileStream As New FileStream(files(key), FileMode.Open, FileAccess.Read) 
        While (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) <> 0 

         requestStream.Write(buffer, 0, bytesRead) 
        End While 

        fileStream.Close() 
       End Using 
      End If 
     Next 
    End If 


    requestStream.Write(trailer, 0, trailer.Length) 
    requestStream.Close() 

    Dim reader As New StreamReader(request.GetResponse().GetResponseStream()) 


    res = reader.ReadToEnd() 

    Return res 

End Function 

を作るための機能である私は、私は簡単なのvar_dump($を得た私のPHPファイルに

Dim Path As String = "C:\dir\temp\" 
    Dim fileLocation As String = Path + "FacePictureL.Jpeg" 
    Dim fileLocation2 As String = Path + "LH1.Jpeg" 
    Dim values As New NameValueCollection() 
    Dim files As New NameValueCollection() 
    values.Add("load", "OnPost") 
    values.Add("value2", "value2") 
    files.Add("FacePictureL", fileLocation) 
    files.Add("LH1", fileLocation2) 
    Dim sendData As New DataUpload() 
    Dim response = sendData.sendHttpRequest("http://127.0.0.1/php/test/index.php", values, files) 
    MsgBox(response) 
    TextBox1.Text = response 

でそれを呼び出します私はあなたに私の提案を与えることができますか?私はあなたが私に何かを与えることができますか? 、 ありがとうございました。

+0

なぜC#タグを追加しましたか? – mok

+0

関数がC#でvbに変換されました 問題が変換エラーの可能性があり、誰かが私を導くことができると仮定します。敬具 –

答えて

0

最後に私は数日間の間違いや研究の後でこれに対する答えを得ました(私がこの記事を作ってからマイナスの評判を出す前に、ちょうど覚えています...私のような人たちは学びたいいくつかの高度なヘルプ)これは、実際の呼び出しを使用して、VBでファイルを持つ投稿をするための更新されたコードです、私はそれが誰かを助けると確信しています。

Imports System.Collections.Specialized 
Imports System.IO 
Imports System.Net 

Public Class DataUpload 
Dim res As String 
Public Function sendHttpRequest(url As String, values As 
NameValueCollection, Optional files As NameValueCollection = Nothing) As 
String 
    Dim boundary As String = "----------------------------" + 
    DateTime.Now.Ticks.ToString("x") 
    Dim boundaryBytes As Byte() = System.Text.Encoding.UTF8.GetBytes((Convert.ToString(vbCr & vbLf & "--") & boundary) + vbCr & vbLf) 
    Dim trailer As Byte() = System.Text.Encoding.UTF8.GetBytes((Convert.ToString(vbCr & vbLf & "--") & boundary) + "--" & vbCr & vbLf) 
    Dim boundaryBytesF As Byte() = System.Text.Encoding.ASCII.GetBytes((Convert.ToString("--") & boundary) + vbCr & vbLf) 
    Dim request As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest) 
    request.ContentType = Convert.ToString("multipart/form-data; boundary=") & boundary 
    request.Method = "POST" 
    request.KeepAlive = True 
    request.Credentials = System.Net.CredentialCache.DefaultCredentials 
    Dim requestStream As Stream = request.GetRequestStream() 

    For Each key As String In values.Keys 
     Dim cntDisp = "Content-Disposition: form-data; name=""{0}"";" & vbCr & vbLf & vbCr & vbLf & "{1}" 
     Dim formItemBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(String.Format(cntDisp, key, values(key))) 
     requestStream.Write(boundaryBytes, 0, boundaryBytes.Length) 
     requestStream.Write(formItemBytes, 0, formItemBytes.Length) 
    Next 
    Dim count = 0 
    If files IsNot Nothing Then 

     For Each key As String In files.Keys 
      If File.Exists(files(key)) Then 
       Dim bytesRead As Integer = 0 
       Dim buffer As Byte() = New Byte(2048) {} 
       Dim cnt As String = "Content-Disposition: form-data; name=""{0}""; filename=""{1}""" & vbCr & vbLf 
       Dim cntype As String = "Content-Type: application/octet-stream" & vbCr & vbLf & vbCr & vbLf 
       Dim formItemBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(String.Format(cnt & cntype, key, files(key))) 
       requestStream.Write(boundaryBytes, 0, boundaryBytes.Length) 

       requestStream.Write(formItemBytes, 0, formItemBytes.Length) 

       Using fileStream As New FileStream(files(key), FileMode.Open, FileAccess.Read) 
        While (BytesDataHelper(bytesRead, fileStream.Read(buffer, 0, buffer.Length))) <> 0 
         requestStream.Write(buffer, 0, bytesRead) 
        End While 
       End Using 
      End If 
     Next 
    End If 
    requestStream.Write(trailer, 0, trailer.Length) 
    requestStream.Close() 
    Dim reader As New StreamReader(request.GetResponse().GetResponseStream()) 
    res = reader.ReadToEnd() 
    Return res 

End Function 
Private Shared Function BytesDataHelper(Of T)(ByRef target As T, ByVal value As T) As T 
    target = value 
    Return value 
End Function 
End Class