Windows Phone7+Web Service的圖片圖片上傳解決方案

關於基本的如何創建WebService及Windows Phone如何引用服務就不多說了~

默認上傳應用中的一張圖。

在WebService端比較簡單,這裏是我們熟悉的IO操作(using System.IO;)

要做的是,從請求中取出byte[]數組,然後寫到相應的文件中即可。

代碼如下:

[WebMethod]
    public string Upload(byte[] fs, string fileType)
    {
        
        string FileName = System.DateTime.Now.ToString("yyyyMMddHHmmssms") + "." + fileType;
        try
        {
            ///定義並實例化一個內存流,以存放提交上來的字節數組。
            MemoryStream m = new MemoryStream(fs);
            ///定義實際文件對象,保存上載的文件。
            FileStream f = new FileStream(Server.MapPath(".")+"\\Images\\"+FileName, FileMode.Create);
            ///把內內存裏的數據寫入物理文件
            m.WriteTo(f);
            m.Close();
            f.Close();
            f = null;
            m = null;
            return Server.MapPath(".");//FileName;
        }
        catch (Exception ex)
        {
            return "NO!!!";
        }
    }

特別要注意的是,FileStream f中的文件路徑一定要存在,既如果使用本程序中的“\Images\Filename”的話,千萬不要忘記新建Images的文件夾!

(很血腥的事實就是我看別人的這段代碼的時候被坑了~)


下面是Windows Phone端。

Windows Phone端本應該超級簡單,如果BitmapImage有toBytes()方法,但是很遺憾,7.1SDK還木有這個方法。

於是我們手工做一個,代碼如下:

這裏就是實現了一個BitmapImage到Byte[]的轉化:

 public byte[] ImageToByteArray(BitmapImage bitmapImage)
        {

            WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage);
            using (MemoryStream stream = new MemoryStream())
            {
                writeableBitmap.SaveJpeg(stream, writeableBitmap.PixelWidth,
                writeableBitmap.PixelHeight, 0, 100);
                byte[] rgbBytes = stream.ToArray();
                return rgbBytes;
            }
        }

具體事件的觸發:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            Uri uri = new Uri("/TryUpload;component/renyunzong.jpg",UriKind.RelativeOrAbsolute);
            BitmapImage img = new BitmapImage(uri);
            image1.Source = img;
            PageTitle.Text = "Waitting";
            byte[] bytes = ImageToByteArray(img);

            client.UploadAsync(bytes, ".jpg");


            button1.IsEnabled = false;
        }
就是這麼多了,關於這個主題的示例等會而就上傳,歡迎下載學習~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章