Невозможно загрузить большие (>50 МБ) файлы в библиотеку документов SharePoint 2010

Я пытаюсь загрузить большой файл в библиотеку документов, но не удается через несколько секунд. Загрузка одного документа завершается неудачно, загрузка нескольких показывает просто сообщение об ошибке. Я увеличил ограничение размера файла в веб-приложении до 500 МБ, а длину запроса IIS до того же (из этого блога) и увеличил время ожидания IIS. Есть ли какие-либо другие размеры шапки, которые я пропустил?

Обновление Я перепробовал несколько файлов разных размеров, что-то размером 50 МБ или более не удается, поэтому я предполагаю, что что-то где-то по-прежнему установлено по умолчанию в веб-приложении.

Обновление 2 Только что загрузил, используя следующую PowerShell:

$web = Get-SPWeb http://{site address}
$folder = $web.GetFolder("Site Documents")
$file = Get-Item "C:\mydoc.txt" // ~ 150MB
$folder.Files.Add("SiteDocuments/mydoc.txt", $file.OpenRead(), $false)

и получите это исключение:

Exception calling "Add" with "3" argument(s): "<nativehr>0x80070003</nativehr><nativestack></nativestack>There is no file with URL 'http://{site address}/SiteDocuments/mydoc.txt' in this Web."

что кажется мне странным, поскольку, конечно, файл не будет существовать, пока он не будет загружен? NB, а библиотека документов имеет имя Site Documents, у него есть URL SiteDocuments, Не уверен, почему...

2 ответа

Для загрузки большого файла вы можете использовать метод PUT вместо других способов загрузки документа. с помощью метода put вы сохраните файл напрямую в базу данных контента. см. пример ниже

Примечание: недостаток кода ниже в том, что вы не можете поймать объект, который отвечает за загрузку напрямую, другими словами, вы не можете напрямую обновить дополнительные пользовательские свойства загруженного документа.

public static bool UploadFileToDocumentLibrary(string sourceFilePath, string targetDocumentLibraryPath)
    {
        //Flag to indicate whether file was uploaded successfuly or not
        bool isUploaded = true;
        try
        {
            // Create a PUT Web request to upload the file.
            WebRequest request = WebRequest.Create(targetDocumentLibraryPath);

            //Set credentials of the current security context
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Method = “PUT”;

            // Create buffer to transfer file
            byte[] fileBuffer = new byte[1024];

            // Write the contents of the local file to the request stream.
            using (Stream stream = request.GetRequestStream())
            {
                //Load the content from local file to stream
                using (FileStream fsWorkbook = File.Open(sourceFilePath, FileMode.Open, FileAccess.Read))
                {
                    //Get the start point
                    int startBuffer = fsWorkbook.Read(fileBuffer, 0, fileBuffer.Length);
                    for (int i = startBuffer; i > 0; i = fsWorkbook.Read(fileBuffer, 0, fileBuffer.Length))
                    {
                        stream.Write(fileBuffer, 0, i);
                    }

                }
            }

            // Perform the PUT request
            WebResponse response = request.GetResponse();

            //Close response
            response.Close();
        }
        catch (Exception ex)
        {
            //Set the flag to indiacte failure in uploading
            isUploaded = false;
        }

        //Return the final upload status
        return isUploaded;
    }

и вот пример вызова этого метода

UploadFileToDocumentLibrary(@”C:\test.txt”, @”http://home-vs/Shared Documents/textfile.pdf”);

Вы уверены, что обновили правильное веб-приложение? Тип файла заблокирован сервером? Достаточно ли места в вашей базе данных контента? После этого я бы проверил логи ULS и посмотрел, есть ли еще одна ошибка, поскольку кажется, что вы попали в 3 места, которые вам тоже нужно обновить.

Другие вопросы по тегам