我正在使用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