ASP.NET загруженные файлы повреждены - PullRequest
1 голос
/ 05 августа 2010

Я написал следующий код для загрузки файла с 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();
}

1 Ответ

0 голосов
/ 05 августа 2010

Начиная с документации , можно предположить, что:

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

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

Обновление:

Возможно прохождение SPOpenBinaryOptions.Unprotected до OpenBinary может сработать?

...