从Windows Phone 8中的服务器下载Zip文件

时间:2014-02-25 09:54:07

标签: windows-phone-8 windows-phone zip download

我正在尝试从服务器下载并保存Zip文件。

我有来自服务器的字符串。

lastStatusCode = response.StatusCode;

using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
    string result = httpWebStreamReader.ReadToEnd();
    RequestList[0].OnResponse(result, lastStatusCode);
}

如果“lastStatusCode”正常,那么我正在制作Zip文件。

public async void saveFile(string response)
{

    var fileBytes = System.Text.Encoding.UTF8.GetBytes(response.ToCharArray());

    // Get the local folder.
    StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;

    // Create a new folder name MyFolder.
    var dataFolder = await local.CreateFolderAsync("TestFolder",
        CreationCollisionOption.OpenIfExists);

    // Create a new file named DataFile.txt.
    var file = await dataFolder.CreateFileAsync("File.zip",
    CreationCollisionOption.ReplaceExisting);

    // Write the data from the textbox.
    using (var s = await file.OpenStreamForWriteAsync())
    {
        s.Write(fileBytes, 0, fileBytes.Length);
    }
}

我做错了什么?我无法打开此文件。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题!将Stream转换为String然后将String转换为Byte是个坏主意。

我正在将Stream转换为byte:

lock (RequestList)
            {
                //WebRequest request = (WebRequest)callbackResult.AsyncState;
                HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);


                    Stream s = response.GetResponseStream();

                    lastStatusCode = response.StatusCode;
                    s.Position = 0;

                    // Now read s into a byte buffer with a little padding. 
                    byte[] bytes = new byte[s.Length];
                    int numBytesToRead = (int)s.Length;
                    int numBytesRead = 0;
                    do
                    {
                        // Read may return anything from 0 to 10. 
                        int n = s.Read(bytes, numBytesRead, numBytesToRead);
                        numBytesRead += n;
                        numBytesToRead -= n;
                    } while (numBytesToRead > 0);
                    s.Close();
                    WriteFile("Test.zip",bytes);
                    RequestList[0].OnResponse(bytes, lastStatusCode);

                }
                catch (WebException e)
                {
                    Debug.WriteLine("Error : " + e.Message);
                    byte[] streamData = System.Text.Encoding.UTF8.GetBytes(e.Message);
                    RequestList[0].OnResponse(streamData, HttpStatusCode.InternalServerError);
                }
            }

我在这里制作zip文件

public async void WriteFile(string fileName, byte[] response)
{

    IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;

    IStorageFile storageFile = await applicationFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
    //var content = System.Text.Encoding.UTF8.GetBytes(response);

    using (Stream stream = await storageFile.OpenStreamForWriteAsync())
    {
        await stream.WriteAsync(response, 0, response.Length);
    }
}