Thursday, November 1, 2007

Upload File Using Webdav PUT methos

Hi,

A small Webdav UploadFile method which returns string..............
public string UploadFile(string address, string method, string fileName)
{
//file stream object
FileStream filestreamDAV = null;

try
{
fileName = Path.GetFullPath(fileName);
if (m_headers == null)
{
m_headers = new WebHeaderCollection();
}

string contentType = m_headers[HttpKnownHeaderNames.ContentType];

if (contentType != null)
{
if (contentType.ToLower(CultureInfo.InvariantCulture).StartsWith("multipart/"))
{
throw new WebException("");
}
}
else
{
contentType = DefaultUploadFileContentType;
}
m_responseHeaders = null;

filestreamDAV = new FileStream(fileName, FileMode.Open, FileAccess.Read);
WebRequest request = WebRequest.Create(GetUri(address));

request.Credentials = Credentials;
CopyHeadersTo(request);
request.Method = method;

long length = Int64.MaxValue;

try
{
length = filestreamDAV.Length;
}
catch
{
// ignore - can't get content-length from file stream
}

byte[] buffer = new byte[Math.Min(DefaultCopyBufferLength,(int)length)];

using (Stream s = request.GetRequestStream())
{

int nread;
do
{
nread = filestreamDAV.Read(buffer, 0, (int)buffer.Length);
if (nread != 0)
{
s.Write(buffer, 0, nread);
}
} while (nread != 0);
}
filestreamDAV.Close();
filestreamDAV = null;
//Getting the response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Getting the status description from the responseStream to the output string
Stream recieveStream = response.GetResponseStream();
//Embedding the Stream to the StreamReader and Reading it to End
StreamReader readStream = new StreamReader(recieveStream,Encoding.ASCII);
responseString = readStream.ReadToEnd();
//closes the Response
response.Close();
//Closes the StreamReader
readStream.Close();
}

return responseString;

}

No comments: