關於基本的如何創建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;
}
就是這麼多了,關於這個主題的示例等會而就上傳,歡迎下載學習~