How do you copy a file into SharePoint using a WebService?

后端 未结 10 1460
执念已碎
执念已碎 2020-12-10 06:45

I am writting a winforms c# 2.0 application that needs to put an XML file into a document library on SharePoint.

I want to use a WebService instead of using the ob

相关标签:
10条回答
  • 2020-12-10 07:11

    your code is fine, just use the destination url instead of an empty string. See below:

    byte[] xmlByteArray;
    using (MemoryStream memoryStream = new MemoryStream())
    {
        xmlDocument.Save(memoryStream);
        xmlBytes = memoryStream.ToArray();
    }
    
    string destinationUrl = “http://webserver/site/Doclib/UploadedDocument.xml”
    string[] destinationUrlArray = new string[] { destinationUrl };
    
    FieldInformation fieldInfo = new FieldInformation();
    FieldInformation[] fields = { fieldInfo };
    
    
    CopyResult[] resultsArray;
    
    using (Copy copyService = new Copy())
    {
        copyService.Credentials = CredentialCache.DefaultCredentials;
        copyService.Url = "http://webserver/site/_vti_bin/copy.asmx";
    
        copyService.Timeout = 600000;
    
        uint documentId = copyService.CopyIntoItems(destinationUrl , destinationUrlArray, fields, xmlByteArray, out resultsArray);
    }
    
    0 讨论(0)
  • 2020-12-10 07:11

    I don't get it, why are you using Copy rather then UpdateListItems. Perhaps UpdateListItems will be a better match?

    0 讨论(0)
  • 2020-12-10 07:12

    Here's some code I wrote awhile (i apologize, i've had to piece meal it together, but hopefully you get the point of it)

        // Create a request using a URL that can receive a post. 
    WebRequest request = WebRequest.Create("http://sharepointsite/somefile.txt");
    
    // Set the Method property of the request to POST.
    request.Method = "PUT"
    
    Stream dataStream;
    
    // Set the ContentType property of the WebRequest.
    request.ContentType = "multipart/form-data; charset=ISO-8859-1";
    
    byte[] byteArray = File.ReadAllBytes(@"c:\somefile.txt");
    
    // Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length;
    
    // Get the request stream.
    dataStream = request.GetRequestStream();
    
    // Write the data to the request stream.
    dataStream.Write(byteArray, 0, byteArray.Length);
    
    // Close the Stream object.
    dataStream.Close();
    
    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    HttpStatusCode statCode = response.StatusCode;
    
    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd();
    
    // Clean up the streams.
    reader.Close();
    dataStream.Close();
    response.Close();
    
    0 讨论(0)
  • 2020-12-10 07:16

    I had a similiar problem, it turned out that the the client was configured to use NTLM security, but no NTLM header was attached.

    I my case, becuase of the fact that I was using this code on the server-side of an ASP.NET applicaton, was to enable Windows authentication and set

    identity impersonate="true"

    in the server.web section.

    0 讨论(0)
  • 2020-12-10 07:17

    I know this is an old thread but it kept coming up as I was searching for a solution to the same problem.

    Check Steve Curran's answer on this thread http://social.msdn.microsoft.com/Forums/en-SG/sharepointdevelopment/thread/833e38a8-f13c-490d-8ba7-b889b6b25e38. Looks like Basically the request fails because the destination url can't be resolved.

    (Limitations of a new stackflow user - can't post more than one link. See my comment for the rest)

    pat

    0 讨论(0)
  • 2020-12-10 07:17

    Here is what is currently working:

    WebRequest request = WebRequest.Create(“http://webserver/site/Doclib/UploadedDocument.xml”);
    request.Credentials = CredentialCache.DefaultCredentials;
    request.Method = "PUT";
    byte[] buffer = new byte[1024];
    using (Stream stream = request.GetRequestStream())
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            dataFile.MMRXmlData.Save(memoryStream);
            memoryStream.Seek(0, SeekOrigin.Begin);
            for (int i = memoryStream.Read(buffer, 0, buffer.Length); i > 0;
                i = memoryStream.Read(buffer, 0, buffer.Length))
            {
                stream.Write(buffer, 0, i);
            }
        }
    }
    
    WebResponse response = request.GetResponse();
    response.Close();
    

    So... Does anyone have an opinion as to if this "PUT" method is better in the SharePoint environment than using a built-in webservice?

    Right now I would have to say the "PUT" method is better since it works and I could not get the WebService to work.

    Keith

    0 讨论(0)
提交回复
热议问题