2010-12-20 3 views
1

VB.NET의 그래프 API를 사용하여 페이스 북에 사진을 업로드하는 코드를 찾고 있습니다. 나는 Facebook C# SDK를 가지고 있지만, 내가 말할 수있는 한 사진 업로드를 지원하지 않습니다.VB.NET 그래프 API를 사용하여 페이스 북에 사진 업로드

사진에 액세스하면 정상적으로 작동하며 다른 콘텐츠도 Facebook에 잘 보낼 수 있습니다. 사진이 아닙니다.

facebook 문서는 파일을 form-multipart 요청으로 첨부하는 방법에 대해 설명하지만 그 방법을 모릅니다. 잘 설명되지 않은 것은 그것을 가볍게 두는 것입니다. 이런 종류의 일을하기 위해 내가 고용 한 사람조차도 일을 할 수 없었다.

나는 이것을 발견했습니다 : Upload Photo To Album with Facebook's Graph API,하지만 PHP로하는 방법 만 설명합니다.

다른 사이트에서 다양한 방법으로 HTTP 요청의 일부로 사진의 URL을 전달하는 방법을 보았습니다. 그러나 로컬 URL이나 원격 URL을 여러 번 시도한 후에도 잘못된 URL 오류가 계속 발생했습니다.

의견이 있으십니까?

답변

0

POST 요청의 이미지를 Graph API에 전달해야합니다 (publish_stream 권한이 필요함). Facebook 문서에 언급 된 내용이 정확합니다. 다음은 작업을 수행 할 수있는 예제 코드입니다. 그것을 방법 안에서 사용하십시오.

전설 <content> (코드는 C#으로입니다) : 당신이 정보를 제공해야합니다.

업데이트 코드 개선을 위해 의견을 남기십시오.

string ImageData; 
string queryString = string.Concat("access_token=", /*<Place your access token here>*/); 
string boundary = DateTime.Now.Ticks.ToString("x", CultureInfo.InvariantCulture); 

StringBuilder sb = String.Empty; 
sb.Append("----------").Append(boundary).Append("\r\n"); 
sb.Append("Content-Disposition: form-data; filename=\"").Append(/*<Enter you image's flename>*/).Append("\"").Append("\r\n"); 
sb.Append("Content-Type: ").Append(String.Format("Image/{0}"/*<Enter your file type like jpg, bmp, gif, etc>*/)).Append("\r\n").Append("\r\n"); 

using (FileInfo file = new FileInfo("/*<Enter the full physical path of the Image file>*/")) 
{ 
    ImageData = file.OpenText().ReadToEnd(); 
} 
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sb.ToString()); 
byte[] fileData = Encoding.UTF8.GetBytes(ImageData); 
byte[] boundaryBytes = Encoding.UTF8.GetBytes(String.Concat("\r\n", "----------", boundary, "----------", "\r\n")); 
var postdata = new byte[postHeaderBytes.Length + fileData.Length + boundaryBytes.Length]; 
Buffer.BlockCopy(postHeaderBytes, 0, postData, 0, postHeaderBytes.Length); 
Buffer.BlockCopy(fileData, 0, postData, postHeaderBytes.Length, fileData.Length); 
Buffer.BlockCopy(boundaryBytes, 0, postData, postHeaderBytes.Length + fileData.Length, boundaryBytes.Length); 

var requestUri = new UriBuilder("https://graph.facebook.com/me/photos"); 
requestUri.Query = queryString; 
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri.Uri); 
request.Method = "POST"; 
request.ContentType = String.Concat("multipart/form-data; boundary=", boundary); 
request.ContentLength = postData.Length; 

using (var dataStream = request.GetRequestStream()) 
{ 
     dataStream.Write(postData, 0, postData.Length); 
} 

request.GetResponse(); 
+0

마침내이 문제를 해결하려고했지만 "원격 서버에서 오류 (400)가 잘못되었습니다."라는 오류 메시지가 나타납니다. 내가 다른 방법으로 얻은 것. 요청 변수를 두 번 선언했다고 vb.net이 마음에 들지 않았습니다. – user548084

+0

오, 그래, 난 그 .. .. 그리고 당신의 문제에 대한 죄송합니다 죄송합니다 ... 유효한 액세스 토큰을 사용하고 있습니다. 브라우저 (GET) 요청에서 액세스 토큰을 사용하여 해당 URI를 사용해보십시오. 여전히 오류가 발생합니다 ... –

관련 문제