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