我正在使用Facebook的Javascript API來開發將需要能夠將圖像發佈到用戶牆上的應用程序。 據我所知,應用程序的這部分需要在服務器端,因爲它需要將圖像數據發佈爲「multipart/form-data」。使用圖形API將圖像從.NET發佈到Facebook牆
注意:這不是使用「後」的簡單版本,而是真正的「照片」方法。
http://graph.facebook.com/me/photos
我想我面臨兩個問題,一個.NET和Facebook的問題:
Facebook的問題:我不太清楚,如果所有的參數應該被髮送的多/表單數據(包括access_token和消息)。唯一的代碼示例使用cUrl util /應用程序。
.NET問題:我從來沒有發出從.NET的multipart/form-data的請求,我不知道,如果.NET自動創建的MIME部分,或者如果我有編碼中的一些參數特殊的方式。
調試有點困難,因爲我從Graph API獲得的唯一錯誤響應是「400 - 錯誤的請求」。 下面是代碼,因爲它看起來當我決定寫這個問題(是的,它有點冗長:-)
最終的答案當然是一個示例片段張貼圖像從.NET,但我可以解決少。
string username = null;
string password = null;
int timeout = 5000;
string requestCharset = "UTF-8";
string responseCharset = "UTF-8";
string parameters = "";
string responseContent = "";
string finishedUrl = "https://graph.facebook.com/me/photos";
parameters = "access_token=" + facebookAccessToken + "&message=This+is+an+image";
HttpWebRequest request = null;
request = (HttpWebRequest)WebRequest.Create(finishedUrl);
request.Method = "POST";
request.KeepAlive = false;
//application/x-www-form-urlencoded | multipart/form-data
request.ContentType = "multipart/form-data";
request.Timeout = timeout;
request.AllowAutoRedirect = false;
if (username != null && username != "" && password != null && password != "")
{
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(username, password).GetCredential(new Uri(finishedUrl), "Basic");
}
//write parameters to request body
Stream requestBodyStream = request.GetRequestStream();
Encoding requestParameterEncoding = Encoding.GetEncoding(requestCharset);
byte[] parametersForBody = requestParameterEncoding.GetBytes(parameters);
requestBodyStream.Write(parametersForBody, 0, parametersForBody.Length);
/*
This wont work
byte[] startParm = requestParameterEncoding.GetBytes("&source=");
requestBodyStream.Write(startParm, 0, startParm.Length);
byte[] fileBytes = File.ReadAllBytes(Server.MapPath("images/sample.jpg"));
requestBodyStream.Write(fileBytes, 0, fileBytes.Length);
*/
requestBodyStream.Close();
HttpWebResponse response = null;
Stream receiveStream = null;
StreamReader readStream = null;
Encoding responseEncoding = System.Text.Encoding.GetEncoding(responseCharset);
try
{
response = (HttpWebResponse) request.GetResponse();
receiveStream = response.GetResponseStream();
readStream = new StreamReader(receiveStream, responseEncoding);
responseContent = readStream.ReadToEnd();
}
finally
{
if (receiveStream != null)
{
receiveStream.Close();
}
if (readStream != null)
{
readStream.Close();
}
if (response != null)
{
response.Close();
}
}
謝謝 - 期待它進行旋轉。 – 2011-02-06 19:34:09
無法聯繫到此網站 – zchpit 2018-02-12 20:53:02