Upload Image with Facebook status, WP8

*爱你&永不变心* 提交于 2020-01-07 02:31:32

问题


I am unable to send the facebook status with image. Found the code but it throws the exception

The Safe handle is closed

kindly let me know if i am missing something. there was another example where File.OpenRead(filename) was used but it threw the UnAuthorizedAccessException

the code is following :

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();
            }
        }

回答1:


sending image with facebook status through media stream is not good as it creates trouble with isolatedStorage streams. best way is to move parameters in Dictionary object rather than anonymous objects. so there are totally 2 changes. one from FacebookMediaStream to FacebookMediaObject and second is the use of Dictionary object instead of using anonymous object

following is the code to describe the scenario.

 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);
        }
    }


来源:https://stackoverflow.com/questions/14053346/upload-image-with-facebook-status-wp8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!