http web服务器在Windows Phone 8中返回zip文件

时间:2014-06-09 13:10:12

标签: windows-phone-8 webserver

您好我在我的应用中编写了一个http网络服务器。 我用过这段代码 http://developer.nokia.com/community/wiki/A_simplistic_HTTP_Server_on_Windows_Phone

此过程有效但http响应中没有文件扩展

返回没有扩展名的文件名(.zip)

private async Task<StringBuilder> HandleRequest(StreamSocket socket)
    {

        //Initialize IO classes
        DataReader reader = new DataReader(socket.InputStream);
        reader.InputStreamOptions = InputStreamOptions.Partial;

        DataWriter writer = new DataWriter(socket.OutputStream);
        writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;

        //handle actual HTTP request
        String request = await StreamReadLine(reader);

        string[] tokens = request.Split(' ');
        if (tokens.Length != 3)
        {
            throw new Exception("invalid http request line");
        }
        string httpMethod = tokens[0].ToUpper();
        string httpUrl = tokens[1];

            //read HTTP headers - contents ignored in this sample
            while (!String.IsNullOrEmpty(await StreamReadLine(reader))) ;

            try
            {

                if (httpUrl == "DOWNLOADZIP")
                {
                         using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
                         {
                               String content = null;
                               Stream stream;
                               byte[] data;

                               IsolatedStorageFileStream sri = storage.OpenFile("CompressedFiles.zip", FileMode.Open, FileAccess.Read);
                               if (null != sri)
                               {
                                  stream = sri;
                                  data = new byte[stream.Length];
                                  stream.Read(data, 0, data.Length);
                                  writer.writebytes(data);
                               }
                         }

                }

            }
            catch (Exception ex)//any exception leads to an Internal server error
            {
                writer.WriteString("HTTP/1.0 500 Internal server error\r\n");
                writer.WriteString("Connection: close\r\n");
                writer.WriteString("\r\n");
                writer.WriteString(ex.Message);
            }
        }

        await writer.StoreAsync();//write data actually to the network interface

        socket.Dispose(); 
        return null;
    }

1 个答案:

答案 0 :(得分:0)

这是一个解决方案

ret.AppendLine("HTTP/1.0 200 OK");
ret.AppendLine("Content-Type: text/html");
ret.AppendLine("Connection: close");
ret.AppendLine("");
ret.AppendLine("Content-Disposition: attachment; filename=myfile.zip");