SharePoint 2010 클라이언트 개체 모델을 사용 하 여 1 GB 크기의 파일을 업로드 하는 방법


증상


SharePoint 클라이언트 OM을 사용 하 여 SharePoint 2010 문서 라이브러리에 파일을 업로드할 때 다음 오류와 함께 실패를 3MB가 넘는 파일 업로드:

원격 서버에서 오류를 반환 했습니다: (400) 잘못 된 요청입니다.

스택 추적:

System.Net.WebException 처리 되지 않았습니다.
메시지 = 원격 서버에서 오류를 반환 했습니다: (400) 잘못 된 요청입니다.
 Source=System
StackTrace:
System.Net.HttpWebRequest.GetResponse()에서
Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute()에서
Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer (ChunkStringBuilder sb)에
Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery()에서
Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery()에서
Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()에서
C:\SPClientOMConsoleApp\SPClientOMConsoleApp\Program.cs:line 32에 SPClientOMConsoleApp.Program.Main (String args)에
System.AppDomain._nExecuteAssembly (어셈블리 어셈블리, String args)에
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()에서
System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback 콜백 개체 상태)에서
System.Threading.ThreadHelper.ThreadStart()에서
InnerException:

SharePoint 2010 클라이언트 OM을 사용 하 여 파일을 업로드 하는 데 사용 되는 샘플 프로그램:

ClientContext clientContext = ClientContext("http://server:10000/사이트/testSite");
웹 = clientContext.Web;
clientContext.Load(web);
목록 문서 라이브러리 웹 =. Lists.GetByTitle ("문서 라이브러리");
clientContext.Load(docLib);
clientContext.ExecuteQuery();
바이트 b 파일 System.IO =. 파일입니다. ReadAllBytes (@"C:\largeFile.docx").
FileCreationInformation 파일 = 새로운 FileCreationInformation();
파일입니다. 콘텐츠 = b 파일;
파일입니다. Url = "http://server:10000/사이트/testSite/문서 라이브러리/" + "test.docx";
Microsoft.SharePoint.Client입니다. NewFile 파일 = docLib.RootFolder.Files.Add(file);
clientContext.Load(newFile);
clientContext.ExecuteQuery();

요구 사항:

예를 들어, 최대 1GB 또는 SharePoint 2010에서 클라이언트 개체 모델을 사용 하 여 더 큰 크기를 사용 하 여 파일을 업로드 하는 방법.

원인


파일 크기 및 시간 제한 설정에 기본 내부 제한 SharePoint 클라이언트 개체 모델을 사용 하 여 크기가 큰 파일의 업로드를 중지 합니다.

해결 방법


SharePoint 인프라에서 허용 하는 최대 업로드 크기에 가까운 파일을 업로드 하 여 생각해 봅시다. 이 위해서는 먼저 해야 즉, SharePoint 2010에서에서 허용 되는 최대 파일 크기를 조정 하는 프로세스를 업로드 파일과 관련 된 기본값 변경, SharePoint 2010 용 클라이언트 요청 서비스 설정에서 최대 수신된 메시지 크기 및 시간 제한 SharePoint 웹 응용 프로그램의 web.config에 지정 된 설정입니다. 아래 세부 사항을 확인 하십시오.

최대 파일 크기를 사용 하 여 SharePoint 2010 라이브러리에 업로드를 허용 하는 증가 다음 단계:

  1. SharePoint 2010 중앙 관리 사이트에 대 한 찾아보기에 응용 프로그램 관리-> 웹 응용 프로그램 관리-> (< CentralAdminURL > / _admin/WebApplicationList.aspx) 선택-> 큰 파일을 업로드 하려는 웹 응용 프로그램 선택->. 리본 메뉴에서 일반 설정입니다.
  2. 한 번 "웹 응용 프로그램 일반 설정" 페이지에서 아래로 스크롤하여 "최대 업로드 크기" 섹션을 찾습니다.
  3. "최대 업로드 크기"에 대 한 값을 2047MB로 변경 (2GB는 최대 허용 값을 여기서에서 설정할 수 임)
  4. 확인 하 고 설정 변경 내용을 저장 하려면 확인을 클릭 합니다.

웹 응용 프로그램의 web.config 파일에서 시간 제한 설정을 늘립니다.

  1. SharePoint 2010 서버 컴퓨터에 "C:\inetpub\wwwroot\wss\VirtualDirectories" 폴더를 찾아 위의 웹 응용 프로그램과 관련 된 소스 폴더를 선택 합니다.
  2. 이 폴더에 응용 프로그램의 web.config 파일을 볼 수 있습니다.
  3. HTTPRuntime 요소 (됩니다 여러 HTTPRuntime 요소를 변경 하려면이 파일에서)를 찾아서 메모장 같은 텍스트 편집기에서 web.config 파일을 엽니다.
  4. 설정에서 지정한 작업 시간 = "2097151" executionTimeout "1800000" =
  5. 또한 jsonSerialization 요소를 찾아 값을 "2146435072"로 설정
  6. 저장 하 고 web.config 파일을 닫습니다.

SharePoint 2010에 대 한 클라이언트 요청 서비스 설정을 늘립니다.

실행은이 설정 값이 증가 하는 콘솔 응용 프로그램의 코드를 아래:

사용 하 여 시스템;
사용 하 여 System.Collections.Generic;
사용 하 여 System.Text;
사용 하 여 Microsoft.SharePoint.Client;
사용 하 여 Microsoft.SharePoint;
사용 하 여 Microsoft.SharePoint.Administration;
사용 하 여 System.IO;

네임 스페이스 SPClientOMConsoleApp

{
클래스 프로그램
{
정적 void Main (stringargs)
{
SPWebService ws SPWebService=. ContentService;

SPClientRequestServiceSettings clientSettings = ws. ClientRequestServiceSettings;

clientSettings.MaxReceivedMessageSize = 2146435072;

ws입니다. Update ();

콘솔. WriteLine(clientSettings.MaxReceivedMessageSize);

}
}
}

이제 설정값을 늘렸습니다 수 사용 하 여 SharePoint 2010 클라이언트 개체 모델을 사용 하 여 큰 파일을 업로드 하려면 아래에 지정 된 두 개의 코드 옵션:

옵션 1:

위에서 설명 했 듯이 MaxReceivedMessageSize는 예를 들어 2GB 보다 높은 값으로 설정 하 Microsoft.SharePoint.Administration.SPClientRequestServiceSettings API를 사용 합니다. MaxReceivedMessageSize 속성 값을 한 번만 설정 해야 하며 실행 될 때마다 클라이언트 OM 기반 파일 업로드 코드 필요가 없습니다 트리거됩니다.

(이 옵션은 사용할 수 있도록 "Any CPU"로.NET Framework 3.5 및 대상 플랫폼을 사용 하 여 프로젝트 속성 설정)

사용 하 여 시스템;
사용 하 여 System.Collections.Generic;
사용 하 여 System.Linq;
사용 하 여 System.Text;
사용 하 여 Microsoft.SharePoint.Client;
사용 하 여 System.IO;

네임 스페이스 SPClientOMConsoleApp
{
클래스 프로그램
{
정적 void Main (stringargs)
{
ClientContext clientContext = ClientContext("http://server:10000/사이트/testSite");
웹 = clientContext.Web;
clientContext.Load(web);
목록 문서 라이브러리 웹 =. Lists.GetByTitle ("문서 라이브러리");
clientContext.Load(docLib);
clientContext.ExecuteQuery();  

바이트 b 파일 System.IO =. 파일입니다. ReadAllBytes (@"C:\largeFile.docx").
FileCreationInformation 파일 = 새로운 FileCreationInformation();
파일입니다. 콘텐츠 = b 파일;
파일입니다. Url = "http://server:10000/사이트/testSite/문서 라이브러리/" + "test.docx";
Microsoft.SharePoint.Client입니다. NewFile 파일 = docLib.RootFolder.Files.Add(file);
clientContext.Load(newFile);
clientContext.ExecuteQuery();
}
}
}

옵션 2:

HTTP DAV를 사용 하 여 우리가 원시 이진 데이터를 통해 보내고 받은 메시지 크기를 늘릴 필요는 없습니다.  관리 되는 클라이언트 개체 모델을 사용 하는 경우 이것이 기본 업로드 방법입니다.

사용 하 여 시스템;
사용 하 여 System.Collections.Generic;
사용 하 여 System.Linq;
사용 하 여 System.Text;
사용 하 여 Microsoft.SharePoint.Client;
사용 하 여 System.IO;

네임 스페이스 SPClientOMConsoleApp
{
클래스 프로그램
{
정적 void Main (stringargs)
{
ClientContext 컨텍스트 = ClientContext("http://server:10000/사이트/testSite");
사용 하 여 (FileStream fs = FileStream(@"C:\largeFile.docx", FileMode입니다. 열 수 있음))
{
Microsoft.SharePoint.Client입니다. 파일입니다. SaveBinaryDirect (에서 "/ sites/testSite/doclib/test.docx", fs, true);
}
}
}
}

제대로 업로드 파일의 크기에 대 한 위의 옵션을 입증 된 최대 1GB입니다. 큰 값 (예를 들어 파일 크기 1.8 g B), 2 (HTTP DAV) 위에 표시 된 옵션을 사용 합니다.

자세한 내용


때때로 업로드 작업이 시간 제한 예외를 반환 하는 이것은 매우 큰 파일 크기는 2GB에 가까운 중요 볼 수 있습니다. 그렇지 않으면 try catch 블록을 사용 하 여 무시 될 수 있으며 파일이 성공적으로 업로드 했습니다 표시 되어야 합니다.