2

我有一个包含照片列表的网站。用户可以选择下载每张照片。下载只是将结果写入输出流。

这是代码:

[WebMethod]
public static void DownloadPhotoAsset(string assetId)
{
    var photoAsset = GetPhotoAsset(assetId);

    Stream stream = null;
    int bytesToRead = 10000;
    byte[] buffer = new Byte[bytesToRead];

    try
    {
        HttpWebRequest fileReq =
            (HttpWebRequest)HttpWebRequest.Create(photoAsset.FileAbsoluteUrl);
        HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse();

        if (fileReq.ContentLength > 0)
            fileResp.ContentLength = fileReq.ContentLength;

        stream = fileResp.GetResponseStream();

        var resp = HttpContext.Current.Response;

        resp.ContentType = "application/octet-stream";
        resp.AddHeader("Content-Disposition",
                       "attachment; filename=\"" + 
                           Path.GetFileName(photoAsset.FileAbsoluteUrl) + "\"");
        resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());

        int length;
        do
        {
            // verify that the client is connected.
            if (resp.IsClientConnected)
            {
                // read data into the buffer and write it out
                // to the response's output stream
                length = stream.Read(buffer, 0, bytesToRead);
                resp.OutputStream.Write(buffer, 0, length);

                // flush the data and clear the buffer
                resp.Flush();
                buffer = new Byte[bytesToRead];
            }
            else
                length = -1; // cancel the download if client has disconnected
        } while (length > 0); //Repeat until no data is read
    }
    finally
    {
        if (stream != null)
            stream.Close(); // close the input stream
    }
}

这在 Windows 上的每个浏览器中都可以正常工作,但我在 Mac 上遇到网络连接问题。

  • 在 Safari 中,下载会在一秒钟后停止并显示“网络连接已丢失”
  • 在 Chrome 中,错误显示“失败 - 网络错误”
  • 在 Firefox 中,错误显示“下载错误 - image.jpeg.part 无法保存,因为无法读取源文件”

我用 OSX 10.7.4 和 OSX 10.8.3 检查了两台不同的 Mac

有人知道我在这里做错了什么吗?

4

0 回答 0