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;
        }
就是这么多了,关于这个主题的示例等会而就上传,欢迎下载学习~

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页