asp.netを使用してFacebookgrapapiに画像を投稿しようとしていますが、ここにすばらしい投稿があることを知ってい ます。vb.netのコードが必要なため、GraphAPIを使用して.NETからFacebookウォールに画像を投稿します。あそこに記述されているコードを変換しましたが、彼の写真をFacebookに投稿しようとすると、次のエラーが発生します。
リモートサーバーがエラーを返しました:(400)不正な要求。
私にとって、これは顔から来る唯一のリクエストであるため、このエラーをデバッグするのは少し難しいです。したがって、エラーが私のフォームの郵便番号が正しく生成されていないためか、エラーが私が試している画像にあるためかはわかりません送信します。
私はhttpフォームの投稿についてたくさん読んでいましたが、それでも私のエラーがどこにあるのか理解できません... facebookによって提供された例によると、私は必要なすべてのパラメーターを持っていると思います。
Facebookの例のコード:
// Show photo upload form to user and post to the Graph URL
$graph_url= "https://graph.facebook.com/me/photos?"
. "access_token=" .$access_token;
echo '<html><body>';
echo '<form enctype="multipart/form-data" action="'
.$graph_url .' "method="POST">';
echo 'Please choose a photo: ';
echo '<input name="source" type="file"><br/><br/>';
echo 'Say something about this photo: ';
echo '<input name="message"
type="text" value=""><br/><br/>';
echo '<input type="submit" value="Upload"/><br/>';
echo '</form>';
echo '</body></html>';
フォーム投稿で生成されたコード(画像を送信する前)
----------------------------- 8cf5b7942cad9d0 Content-Disposition:form-data; name = "access_token"
DummyAccessTokkenFNC98HZQdkEK7%2foEWpdyFu%2byHu%2bUKAfbTE54aBB5vdHFJaecGHPpGrLCrd5bEZWxlXvVKej0ApDbjEzjki8xzvl28etjRxH1LzcJP314RO5HJDbNb name="メッセージ"
Lombardiはstackoverflowが好きです-----------------------------8cf5b7942cad9d0Content-Disposition:form-data; name = "source"; filename = "〜\ img \ taco.jpeg"コンテンツタイプ:application / octet-stream
どんな助けでも大歓迎です。
そしてこれは私の完全な関数コードです
Private Function FB_UploadPhoto(ByVal album_id As String, ByVal message As String, ByVal filename As String, ByVal bytes As Byte(), ByVal Token As String) As String
Dim boundary As String = "---------------------------" + DateTime.Now.Ticks.ToString("x")
Dim path As String = "https://graph.facebook.com/" '& FacebookID() & "/"
If Not String.IsNullOrEmpty(album_id) Then
path += album_id + "/"
End If
path += "photos"
Dim uploadRequest As System.Net.HttpWebRequest
uploadRequest = CType(System.Net.HttpWebRequest.Create(path), System.Net.HttpWebRequest)
uploadRequest.ServicePoint.Expect100Continue = False
uploadRequest.Method = "POST"
uploadRequest.UserAgent = "Mozilla/4.0 (compatible; Windows NT)"
uploadRequest.ContentType = "multipart/form-data; boundary=" + boundary
uploadRequest.KeepAlive = False
'New string builder
Dim sb As New System.Text.StringBuilder
'Add Form Data
Dim formdataTemplate As String = "--{0}" & vbCrLf & "Content-Disposition: form-data; name=""{1}""" & vbCrLf & vbCrLf & "{2}" & vbCrLf
'Access Token
sb.AppendFormat(formdataTemplate, boundary, "access_token", HttpContext.Current.Server.UrlEncode(Token))
' Message
sb.AppendFormat(formdataTemplate, boundary, "message", message)
'header
Dim headerTemplate As String = "--{0}" & vbCrLf & "Content-Disposition: form-data; name=""{1}""; filename=""{2}""" & vbCrLf & "Content-Type: {3}" & vbCrLf & vbCrLf
sb.AppendFormat(headerTemplate, boundary, "source", filename, "application/octet-stream")
'sb.AppendFormat(headerTemplate, boundary, "source", filename, "image/jpeg")
Dim formString As String = sb.ToString()
Dim formBytes As Byte() = Encoding.UTF8.GetBytes(formString)
Dim trailingBytes As Byte() = Encoding.UTF8.GetBytes("" & vbCrLf & "--" & boundary + "--" & vbCrLf)
Dim image As Byte()
If bytes Is Nothing Then
image = System.IO.File.ReadAllBytes(HttpContext.Current.Server.MapPath(filename))
Else
image = bytes
End If
'memory stream
Dim imageMemoryStream As New System.IO.MemoryStream()
imageMemoryStream.Write(image, 0, image.Length)
' Set Content Length
Dim imageLength As Long = imageMemoryStream.Length
Dim contentLength As Long = formBytes.Length + imageLength + trailingBytes.Length
uploadRequest.ContentLength = contentLength
'Get Request Stream
uploadRequest.AllowWriteStreamBuffering = False
Dim strm_out As System.IO.Stream = uploadRequest.GetRequestStream()
'Write to Stream
strm_out.Write(formBytes, 0, formBytes.Length)
Dim buffer As Byte() = New Byte(CType(Math.Min(4096, CType(imageLength, Integer)), UInteger)) {} 'New Byte(CUInt(imageLength)) {} ' New Byte(CUInt(Math.Min(4096, CInt(imageLength)))) {} ' 'New Byte(CUInt(Math.Min(4096, CInt(imageLength)))) {} 'New Byte(CType(Math.Min(4096, CType(imageLength, Integer)), UInteger)) {}
Dim bytesRead As Integer = 0
Dim bytesTotal As Integer = 0
imageMemoryStream.Seek(0, IO.SeekOrigin.Begin)
'While bytesRead = imageMemoryStream.Read(buffer, 0, buffer.Length) <> 0
' strm_out.Write(buffer, 0, bytesRead)
' bytesTotal += bytesRead
'End While
bytesRead = imageMemoryStream.Read(buffer, 0, buffer.Length)
While bytesRead <> 0
strm_out.Write(buffer, 0, bytesRead)
bytesTotal += bytesRead
bytesRead = imageMemoryStream.Read(buffer, 0, buffer.Length)
End While
strm_out.Write(trailingBytes, 0, trailingBytes.Length)
'Close Stream
strm_out.Close()
'Get Web Response
Dim response As System.Net.HttpWebResponse = uploadRequest.GetResponse()
' Create Stream Reader
Dim reader As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
Return reader.ReadToEnd()
End Function