views:

1342

answers:

3

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.

A: 

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?

Colin
Might be, but wouldn't know what to change. I tried turning versioning off for this doc library with no effect. Also, I switched off the 2nd part which updates the other item fields. Now nothing happens in SharePoint at all. It's like the code never executed - even though I saw it with my own eyes.
misteraidan
A: 

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?

Paul-Jan
I originally had a capital T and lowered it, which explains the code I pasted here.. There is no error code - the code fully executes, but the existing file remains. There is no change to the version history either. It's like nothing ever happened.
misteraidan
+1  A: 

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!

misteraidan