Upload file to SharePoint WSS 3.0 with WebRequest PUT

故事扮演 提交于 2019-12-19 09:49:41

问题


Hey, I've got this nice little piece of code, much like all the other versions of this method of upload using WSS WebServices. I've got one major problem though - once I have uploaded a file into my doc list, and updated the list item to write a comment/description, the file is stuck there. What I mean is that this method will not overwrite the file once I've uploaded it. Nobody else out there seems to have posted this issue yet, so .. anyone?

I have another version of the method which uses a byte[] instead of a Stream .. same issue though.

Note: I have switched off the 'require documents to be checked out before they can be edited' option for the library. No luck tho .. The doc library does have versioning turned on though, with a major version being created for each update.

    private void UploadStream(string fullPath, Stream uploadStream)
    {
        WebRequest request = WebRequest.Create(fullPath);
        request.Credentials = CredentialCache.DefaultCredentials; // User must have 'Contributor' access to the document library
        request.Method = "PUT";
        request.Headers.Add("Overwrite", "t");

        byte[] buffer = new byte[4096];
        using (Stream stream = request.GetRequestStream())
        {
            for (int i = uploadStream.Read(buffer, 0, buffer.Length); i > 0; i = uploadStream.Read(buffer, 0, buffer.Length))
            {
                stream.Write(buffer, 0, i);
            }
        }
        WebResponse response = request.GetResponse(); // Upload the file
        response.Close();
    }

Original credits to: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

EDIT -- major finding .. when I call it from my nUnit test project it works fine. It seems it only fails when I call it from my WCF application (nUnit running under logged on user account, WCF app has app pool running under that same user -- my account, which also has valid permissions in SharePoint).

Nuts. "Now where to start?!", I muses to myself.


回答1:


SOLVED -- I found a little bug - the file was being created in the right place, but the update path was wrong.. I ended up finding a folder full of files with many, many new versions.. doh!




回答2:


Why not use the out-of-the-box SharePoint webservice, Lists.asmx? You'll find it in

http://SITEURL/___vti_bin/Lists.asmx

Edit, I checked out the link and it seems you are calling the out of the box web service. This has got be versioning related then. Can you check out the different versions that exist in the doc lib of the specific file? see if it perhaps gets added as a minor version through the service?




回答3:


Have you tried using a capital T? SharePoint's webdav header processing is not very likely to be case-sensitive, but the protocol does specify a capital T. Oh, and what is the response? A 412 error code or something altogether different?



来源:https://stackoverflow.com/questions/1061826/upload-file-to-sharepoint-wss-3-0-with-webrequest-put

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!