2009-02-27 20 views
9

का उपयोग कर शेयरपॉइंट (WSS 3.0) दस्तावेज़ लाइब्रेरी में फ़ाइलों को अपलोड करना हाय मेरे पास शेयरपॉइंट पर फ़ाइल अपलोड करने के लिए कोड का निम्न भाग है। यह HTTP PUT उपयोग करता है:HTTP PUT

"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

मुझे अभी भी एक ही समस्या का सामना करना पड़ा है - जांचें कि यूआरएल वैध हैं! – Rashack

+0

सी # नोब पूछता है: CopyStream कहां से आता है? –

+2

यह CopyRiver – Amicable

उत्तर

8

जब मैं दस्तावेज़ लाइब्रेरी के यूआरएल का संदर्भ दे रहा था और गंतव्य फ़ाइल स्वयं नहीं था तो मुझे यह समस्या आई थी।

यानी कोशिश http://server नाम/दस्तावेज़ लाइब्रेरी नाम/नई फ़ाइल name.doc

+0

मुझे एक ही समस्या थी, और आपका समाधान पूरी तरह से काम करता है। सरल और कुशल। – Antoine

+0

युप जिसने चाल की थी। चीयर्स! – leeand00

1

कोई सुराग। लेकिन आप रिमोट प्रक्रिया कॉल (आरपीसी) का उपयोग क्यों नहीं करते हैं कि मैं आमतौर पर इसे कैसे करता हूं।

मैं इस उदाहरण है कि हो सकता है आप http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

0

वहाँ एक paticular कारण तुम सिर्फ फ़ाइल अपलोड करने की शेयरप्वाइंट एपीआई (जैसे। SPFolder.Files.Add) का उपयोग नहीं कर सकता है शुरू कर दिया पाया? इस प्रकार है:

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" को जांचने के लिए देख सकते हैं कि यह वास्तव में अपेक्षित शेयरपॉइंट सूची को इंगित करता है या नहीं।

मेरी स्थिति है कि मैंने पहली बार दस्तावेज़ लाइब्रेरी "आवश्यकताएं" बनाई हैं, एक टाइपो गलती है, फिर मैंने शीर्षक को "आवश्यकताएं" में बदल दिया। आपको ध्यान रखना चाहिए कि शेयरपॉइंट अभी भी यूआरएल को इस सूची में 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) सफल होता है, इसलिए दस्तावेज़ लाइब्रेरी में दिखाई देता है। फिर जब मैं मेटाडेटा को अपडेट करने का प्रयास करता हूं, तब मुझे 40 9 त्रुटि मिलती है।

मुझे पूरा यकीन है कि मुझे पहले 1) और 2 के बीच एक चरण डालने की आवश्यकता है) जो पहले दस्तावेज की सूची (या प्रकट) डाउनलोड करता है जो सिद्धांत में आवश्यक संस्करण जानकारी को शामिल करता है। मुझे बस इतना करना होगा कि मुझे आवश्यक मेटाडेटा फ़ील्ड सेट करें, और सर्वर पर वापस भेजें।

नहीं, हम शेयरपॉइंट एपीआई का उपयोग नहीं करना चाहते हैं क्योंकि जावा में इसके लिए कोई पुस्तकालय नहीं है। ;-)

संबंधित मुद्दे