Windows Phone Download Save file to Isolated Storage (Application Storage) |
Windows Phone Download Save file to Isolated Storage (Application Storage) ตัวอย่างการเขียนโปรแกรมบน Windows Phone ในการ ดาวน์โหลด (Download) ไฟล์ที่อยู่บน URL (Website) บน Internet และทำการ Save ไฟล์ทีได้จากการดาวน์โหลดลงใน Isolated Storage บน Application ของ Windows Phone
Download Save file to Isolated Storage
Basic Windows Phone and Isolated Storage (Application Storage)
สำหรับพื้นฐาน Isolated Storage กับ Windows Phone ควรอ่าน 2 บทความนี้ เพื่อความเข้าใจ
Example ตัวอย่างการ Download และ Save ไฟล์จากเว็บไซต์ลงใน Isolated Storage บน Application ของ Windows Phone
MainPage.xaml
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Height="30" HorizontalAlignment="Left" Margin="9,291,0,0" Name="txtResult" Text="Result" VerticalAlignment="Top" Width="441" TextAlignment="Center" />
<Button Content="Start Download" Height="72" HorizontalAlignment="Left" Margin="106,81,0,0" Name="btnDownload" Click="btnDownload_Click" VerticalAlignment="Top" Width="238" />
<ProgressBar Height="4" HorizontalAlignment="Left" Margin="0,189,0,0" Name="ProgressBar1" VerticalAlignment="Top" Width="460" />
</Grid>
</Grid>
MainPage.xaml.vb (VB.NET)
Imports System.IO
Imports System.Text
Imports System.IO.IsolatedStorage
Partial Public Class MainPage
Inherits PhoneApplicationPage
' Constructor
Public Sub New()
InitializeComponent()
End Sub
Dim client As WebClient
Dim prog As ProgressIndicator
Dim url As String
Private Sub btnDownload_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
Me.txtResult.Text = "Downloading..."
client = New WebClient()
url = "http://localhost/myphp/music.mp3"
Dim uri As New Uri(url)
AddHandler client.OpenReadCompleted, AddressOf client_OpenReadCompleted
AddHandler client.DownloadProgressChanged, AddressOf client_DownloadProgressChanged
client.OpenReadAsync(uri)
End Sub
Private Sub client_OpenReadCompleted(sender As Object, e As OpenReadCompletedEventArgs)
If e.Cancelled = False AndAlso e.Error Is Nothing Then
Dim strFileName As String = url.Substring(url.LastIndexOf("/") + 1, (url.Length - url.LastIndexOf("/") - 1))
Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() ' Path Storage
'*** If File Exists
If isoStore.FileExists(strFileName) Then
isoStore.DeleteFile(strFileName)
End If
Dim dataFile As New IsolatedStorageFileStream(strFileName, FileMode.CreateNew, isoStore)
Dim fileLen As Long = e.Result.Length
Dim b As Byte() = New Byte(fileLen - 1) {}
e.Result.Read(b, 0, b.Length)
dataFile.Write(b, 0, b.Length)
dataFile.Flush()
Dim lenghtOfFile = dataFile.Length
Me.txtResult.Text = "Download Completed."
End If
End Sub
Private Sub client_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs)
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub
End Class
MainPage.xaml.cs (C#)
using System;
using System.Windows;
using System.Net;
using System.IO;
using System.Text;
using System.IO.IsolatedStorage;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
namespace PhoneApp
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
WebClient client;
ProgressIndicator prog;
string url;
private void btnDownload_Click(object sender, System.Windows.RoutedEventArgs e)
{
this.txtResult.Text = "Downloading...";
client = new WebClient();
url = "http://localhost/myphp/music.mp3";
Uri uri = new Uri(url);
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.OpenReadAsync(uri);
}
private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Cancelled == false && e.Error == null)
{
string strFileName = url.Substring(url.LastIndexOf("/") + 1, (url.Length - url.LastIndexOf("/") - 1));
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
// Path Storage
// *** If File Exists
if (isoStore.FileExists(strFileName))
{
isoStore.DeleteFile(strFileName);
}
IsolatedStorageFileStream dataFile = new IsolatedStorageFileStream(strFileName, FileMode.CreateNew, isoStore);
long fileLen = e.Result.Length;
byte[] b = new byte[fileLen];
e.Result.Read(b, 0, b.Length);
dataFile.Write(b, 0, b.Length);
dataFile.Flush();
object lenghtOfFile = dataFile.Length;
this.txtResult.Text = "Download Completed.";
}
}
private void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this.ProgressBar1.Value = e.ProgressPercentage;
}
}
}
ในตัวอย่างนี้มี Code ทั้งที่เป็น VB.NET และ C# และสามารถดาวน์โหลด All Code ทั้งหมดได้จากส่วนท้ายของบทความ (Login สมาชิกก่อน)
Screenshot
คลิก Start Download เพื่อเริ่มการดาวน์โหลดไฟล์
ไฟล์กำลังดาวน์โหลด โดยจะมีการแสดง ProgressBar เพื่อแสดงสถานะของการดาวน์โหลดด้วย
ไฟล์ดาวน์โหลดเรียบร้อย
ตรวจสอบไฟล์บน Isolated Storage ของ Windows Phone ที่ได้จากการดาวน์โหลด
|