Загруженные файлы ASP.NET повреждены

Я написал следующий код для загрузки файла из sharepoint. Скачанный файл нормально работает только на некоторых машинах. Для других он говорит, что файл поврежден. Проблема связана с файлами MS Office и изображениями, однако с PDF проблем нет. Мы определили проблему повреждения из-за добавления шестнадцатеричного числа вверху содержимого файла. Когда он удален, файл открывается правильно. Было установлено, что шестнадцатеричный символ представляет размер файла в байтах. Почему это происходит только на некоторых машинах и как это исправить?

private void DownloadFile()
{   
    SPListItem item = GetFileFromSharepoint();

    if (item != null)
    {
        byte[] bytes = item.File.OpenBinary();
        Response.ClearContent();
        Response.ClearHeaders();
        string fileType = string.Empty;
        fileType = item["FileFormat"].ToString();
        Response.AppendHeader("Content-Disposition",
                              string.Format("attachment; filename= {0}", item["Filename"].ToString().Replace(" ", "")));
        Response.ContentType = GetContentType(fileType);
        //Check that the client is connected and has not closed the connection after the request
        if (Response.IsClientConnected)
        {
            Response.BinaryWrite(bytes);
        }
    }

    Response.Flush();
    Response.Close();
}

person Ashok    schedule 05.08.2010    source источник


Ответы (1)


Из документации можно предположить, что:

Метод OpenBinary не работает, если размер файла равен 0 (ноль) байт.

Вы уверены, что возвращаемое этой функцией значение верно? Вы не проверяете длину массива bytes.

Обновление:

Возможно, сработает передача SPOpenBinaryOptions.Unprotected в OpenBinary?

person Rabid    schedule 05.08.2010