[英]Upload Image with Facebook status, WP8
我無法發送帶有圖片的Facebook狀態。 找到了代碼,但引發了異常
The Safe handle is closed
請讓我知道我是否想念一些東西。 還有另一個使用File.OpenRead(filename)的例子,但是它拋出了UnAuthorizedAccessException
代碼如下:
public static Stream ImageToShare
{
set
{
try
{
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (myIsolatedStorage.FileExists(ImageToShareKey))
myIsolatedStorage.DeleteFile(ImageToShareKey);
IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(ImageToShareKey);
StreamResourceInfo sri = null;
Uri uri = new Uri(ImageToShareKey, UriKind.Relative);
sri = Application.GetResourceStream(uri);
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(value);
//bitmap.SetSource(sri.Stream);
WriteableBitmap wb = new WriteableBitmap(bitmap);
Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
fileStream.Close();
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
}
}
private void postFBWithImage()
{
try
{
using (IsolatedStorageFile myFile = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream stream = myFile.OpenFile("SharePhoto", FileMode.Open, FileAccess.Read))
using (var imgFile = new FacebookMediaStream
{
ContentType = "image/jpeg",
FileName = Path.GetFileName(imgPath.Text),
}.SetValue(stream))
{
var fb = new FacebookClient(AppSettings.FacebookPIN);
fb.PostCompleted += (o, args) =>
{
if (args.Error != null)
{
notPosted(args);
return;
}
Dispatcher.BeginInvoke(() =>
{
posted();
});
};
fb.PostAsync("me/photos", new { message = ShareComments, imgFile });
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
postFBWithoutImage();
}
}
通過媒體流發送具有Facebook狀態的圖像是不好的,因為這會給isolatedStorage流帶來麻煩。 最好的方法是在Dictionary對象而不是匿名對象中移動參數。 所以總共有2個變化。 一種是從FacebookMediaStream到FacebookMediaObject,第二種是使用Dictionary對象而不是使用匿名對象
以下是描述方案的代碼。
private void postFBWithImage()
{
try
{
using (IsolatedStorageFile myFile = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream stream = myFile.OpenFile(AppSettings.ImageToShareKey, FileMode.Open, FileAccess.Read))
{
byte[] byteArr = null;
using (var binRdr = new BinaryReader(stream))
using (var memStr = new MemoryStream())
{
const int ReadSize = 8196;
int chunkSize = 0;
do
{
byte[] buf = new byte[ReadSize];
chunkSize = binRdr.Read(buf, 0, ReadSize);
memStr.Write(buf, 0, ReadSize);
} while (chunkSize > 0);
byteArr = new byte[memStr.Length];
memStr.Position = 0;
memStr.Read(byteArr, 0, (int)memStr.Length);
}
var fb = new FacebookClient(AppSettings.FacebookPIN);
fb.PostCompleted += (o, args) =>
{
if (args.Error != null)
{
notPosted(args);
return;
}
Dispatcher.BeginInvoke(() =>
{
posted();
});
};
var parameters = new Dictionary<string, object>();
parameters["message"] = ShareComments;
parameters["file"] = new FacebookMediaObject
{
ContentType = "image/jpeg",
FileName = "image.jpeg",
}.SetValue(byteArr);
fb.PostAsync("me/photos", parameters);
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.