2009-02-27 2 views
9

안녕하세요 다음 코드를 사용하여 Sharepoint에 파일을 업로드 할 수 있습니다. 그것은 HTTP의 PUT을 사용HTTP PUT을 사용하여 Sharepoint (WSS 3.0) 문서 라이브러리에 파일 업로드

"The remote server returned an error: (409) Conflict."

사람이 어디 내가 잘못 가고에 관해서는 어떤 아이디어가 있습니까 :이 코드를 실행하면

public static string UploadFile(string destUrl, string sourcePath) 
     { 
      try 
      { 
       Uri destUri = new Uri(destUrl); 
       FileStream inStream = File.OpenRead(sourcePath); 
       WebRequest req = WebRequest.Create(destUri); 
       req.Method = "PUT"; 
       req.Headers.Add("Overwrite", "F"); 
       req.Timeout = System.Threading.Timeout.Infinite; 
       req.Credentials = CredentialCache.DefaultCredentials; 
       Stream outStream = req.GetRequestStream(); 
       string status = CopyStream(inStream, outStream); 
       if (status == "success") 
       { 
        outStream.Close(); 
        WebResponse ores = req.GetResponse(); 
        return "success"; 
       } 
       else 
       { 
        return status; 
       } 
      } 
      catch (WebException we) 
      { 
      return we.Message; 
      } 
      catch (System.Exception ee) 
      { 
      return ee.Message; 
      } 
     } 

나는 예외가?

감사합니다,

알렉스

+0

나는 매우 똑같은 문제에 봉착했습니다. URL이 유효한지 확인하십시오! – Rashack

+0

C# noob ask : CopyStream은 어디서 오는가? –

+2

CopyRiver의 파생물 – Amicable

답변

8

대상 파일 자체가 아닌 문서 라이브러리의 URL을 참조 할 때이 문제가 발생했습니다.

즉, 시도 http://server 이름/문서 라이브러리 이름/새 파일 name.doc을

+0

동일한 문제가 발생하여 솔루션이 완벽하게 작동합니다. 간단하고 효율적입니다. – Antoine

+0

그래, 그 트릭 않았다. 건배! – leeand00

0

바로 파일을 업로드 셰어 API (예. SPFolder.Files.Add)를 사용할 수없는 paticular 이유 당신이 거기를 시작할 수있는이 예제를 발견? 다음과 같이

http://msdn.microsoft.com/en-us/library/ms454491.aspx

public void UploadFile(string srcUrl, string destUrl) 
{ 
    if (! File.Exists(srcUrl)) 
    { 
     throw new ArgumentException(String.Format("{0} does not exist", 
      srcUrl), "srcUrl"); 
    } 

    SPWeb site = new SPSite(destUrl).OpenWeb(); 

    FileStream fStream = File.OpenRead(srcUrl); 
    byte[] contents = new byte[fStream.Length]; 
    fStream.Read(contents, 0, (int)fStream.Length); 
    fStream.Close(); 

    EnsureParentFolder(site, destUrl); 
    site.Files.Add(destUrl, contents); 
} 
+5

이 접근 방식은 서버에서 코드를 실행해야합니까? 나는이 질문이 http를 통해 게시하는 것에 관한 것이라고 생각한다. – msulis

0

알렉스, 를이 너무 나에게 일어났다. 다른 조명 라이브러리 또는 문서 라이브러리를 만들어 테스트 할 파일을 업로드해야합니다.

"destUri"변수가 예상되는 셰어 포인트 목록을 정확히 가리키고 있는지 확인할 수 있습니다.

내 상황은 처음으로 문서 라이브러리 "Requrements"를 만들었습니다. 오타가 있었는데 제목이 "요구 사항"으로 변경되었습니다. 셰어 포인트는이 목록의 URL을 계속 유지합니다. http://server:port/Requrements

이것은 예외입니다. 잘하면 도움이됩니다.

1

시도 : 나는 아직 내 문제가 해결되지

void StorePlainFile(string target_url, string filename, byte[] file_bytes) 
{ 
     string url = target_url + "/" + filename; 
     System.Net.WebClient client = new System.Net.WebClient(); 
     client.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     client.Headers.Add("Overwrite", "F"); 
     byte[] response = client.UploadData(url, "PUT", file_bytes); 
} 
1

, 내가 여기 그 이유는,하지만 내가 아는 왜이 오류가 나옵니까?

숨김이지만 필수 필드를 설정하지 않아서 오류가 발생합니다. 제 경우에는 칼럼이 없었고 꼭 필요한 것은 없었습니다. 그러나 충돌하는 버전 필드가 있습니다.

내 의도는 1) 문서를 업로드하고 2) 문서의 메타 데이터를 설정하는 것입니다. 1) 및 2)는 별도의 HTTP 호출을 통해 발생합니다. 이상적으로, 나는 이것을 한 번의 호출로하고 싶지만, 어떻게 해야할지 모른다.

이 작업을 수행하려면 1) 성공하므로 문서가 라이브러리에 나타납니다. 그런 다음 메타 데이터를 업데이트하려고하면 409 오류가 발생합니다.

나는 이론상 필요한 버전 정보를 포함하고있는 문서의 목록 (또는 목록)을 먼저 다운로드하는 1)과 2) 사이에 단계를 삽입해야한다고 확신한다. 필요한 메타 데이터 필드를 설정하고 서버로 다시 보내면됩니다.

아니요, Sharepoint API는 Java 용 라이브러리가 없으므로 사용하지 않으려합니다. ;-)

관련 문제