寻找一些代码,使用VB.NET中的Graph API将照片上传到Facebook。我有Facebook C#SDK,但据我所知,它不支持上传照片。
访问照片工作正常,我也可以将其他内容发送到Facebook。只是不是照片。
facebook文档讨论了将文件作为表单多部分请求附加,但我不知道如何做到这一点。要说它没有很好的记录是轻描淡写。即使是我雇用的那些人做这种事情也无法让它发挥作用。
我发现了这个:Upload Photo To Album with Facebook's Graph API,但它只描述了如何在PHP中完成它。
我也看到了不同网站上关于将照片的网址作为HTTP请求的一部分传递的不同方法,但在多次尝试本地或远程网址后,我一直收到错误的网址错误或类似的内容。< / p>
有什么想法吗?
答案 0 :(得分:0)
您需要将POST请求中的Image传递给Graph API(需要publish_stream权限)。 Facebook文档中提到的内容是正确的。以下是可以完成工作的示例代码。在方法中使用它。 (代码在C#中)
<强>图例强>
<content>
:您需要提供信息。
<强>更新强> 请发表评论以改进代码。
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();