By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,705 Members | 2,013 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,705 IT Pros & Developers. It's quick & easy.

HttpWebRequest file upload problem

P: n/a
I am trying to code a file uploader (for forum/email attachments) from the
client computer to a remote web server via the PUT method (since POST is not
allowed [405 error]). However, the upload works ONLY when the file is inside
a shared folder on my computer. If I try to upload from any other folder it
does not work. Why is this?

Reason being that whenever I upload files on other forums or websites I know
I don't need to have my folder shared on my network. I just enter a path and
do it. Am I missing a setting on the remote server? Am I coding something
wrong? Please help. Here is my code:

// Upload the file to a web server using the HttpWebRequest object
string strAttachFile = "C:\temp\blah.txt";
HttpWebRequest myHttpWebRequest =
(HttpWebRequest)WebRequest.Create("http://localhost/myFile.txt"); // The
server path and name of the file we are saving
BinaryReader rdr = new BinaryReader(File.OpenRead(@strAttachFile)); // The
client path and name of the file we are uploading
byte[] data = rdr.ReadBytes((int)rdr.BaseStream.Length);
myHttpWebRequest.Method = "PUT";
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.SendChunked = true;
myHttpWebRequest.Timeout = 10000;
myHttpWebRequest.ContentLength = data.Length;
myHttpWebRequest.KeepAlive = true;
Stream s = myHttpWebRequest.GetRequestStream();
s.Write(data, 0, data.Length);
s.Close();
HttpWebResponse myHttpWebResponse =
(HttpWebResponse)myHttpWebRequest.GetResponse();
myHttpWebResponse.Close();
Nov 16 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Hi there -

what is the exception that's being thrown? What are the permissions that the
app runs with?
If you're starting it from a web site, you might have problems with the Code
Access Security policies on the machine ...

Can you please be more specific about the enviornment you/your users are
gonna use?

Cheers,
Branimir

--
Branimir Giurov
MCSD.NET, MCDBA
www.sofiadev.org

"R Reyes" <RR****@discussions.microsoft.com> wrote in message
news:51**********************************@microsof t.com...
I am trying to code a file uploader (for forum/email attachments) from the
client computer to a remote web server via the PUT method (since POST is
not
allowed [405 error]). However, the upload works ONLY when the file is
inside
a shared folder on my computer. If I try to upload from any other folder
it
does not work. Why is this?

Reason being that whenever I upload files on other forums or websites I
know
I don't need to have my folder shared on my network. I just enter a path
and
do it. Am I missing a setting on the remote server? Am I coding
something
wrong? Please help. Here is my code:

// Upload the file to a web server using the HttpWebRequest object
string strAttachFile = "C:\temp\blah.txt";
HttpWebRequest myHttpWebRequest =
(HttpWebRequest)WebRequest.Create("http://localhost/myFile.txt"); // The
server path and name of the file we are saving
BinaryReader rdr = new BinaryReader(File.OpenRead(@strAttachFile)); //
The
client path and name of the file we are uploading
byte[] data = rdr.ReadBytes((int)rdr.BaseStream.Length);
myHttpWebRequest.Method = "PUT";
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.SendChunked = true;
myHttpWebRequest.Timeout = 10000;
myHttpWebRequest.ContentLength = data.Length;
myHttpWebRequest.KeepAlive = true;
Stream s = myHttpWebRequest.GetRequestStream();
s.Write(data, 0, data.Length);
s.Close();
HttpWebResponse myHttpWebResponse =
(HttpWebResponse)myHttpWebRequest.GetResponse();
myHttpWebResponse.Close();

Nov 16 '05 #2

P: n/a
R Reyes wrote:
Two different web servers I have tried, here they are

Here is the first on a remote web server. I think this is probably a
permissions error and am trying to figure out exactly which ones
because read/write are granted...
File upload failed: System.Net.WebException: The remote server
returned an error: (405) Method Not Allowed.
at System.Net.HttpWebRequest.CheckFinalStatus()
at System.Net.HttpWebRequest.EndGetResponse(IAsyncRes ult
asyncResult) at System.Net.HttpWebRequest.GetResponse()
at myProject.ForumSubmit.uploadFile(String strAttachFile) in
C:\Inetpub\wwwroot\myProject\ForumSubmit.aspx.cs:l ine 181
What did you try? A PUT? A POST?
Here is the second connection which is just to another folder on my
computer...I also have folder with read/write access so I am not sure
why access is denied.
File upload failed: System.UnauthorizedAccessException: Access to the
path "C:\public\tempFiles\work\docs\myDoc_.doc" is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
access, FileShare share, Int32 bufferSize, Boolean useAsync, String
msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
access, FileShare share)
at System.IO.File.OpenRead(String path)
at myProject.ForumSubmit.uploadFile(String strAttachFile) in
c:\inetpub\wwwroot\myProject\forumsubmit.aspx.cs:l ine 170
Does the ASP.NET process have write permission for
C:\public\tempFiles\work\docs?
I'm not sure why it's not working or why a folder needs certain
access.
Because of security? It's not a good idea to allow exposed services like a
web server or an application server to do everything on your production
server.
Whenever I try uploading files from my computer to any forum
online they don't need to see my folders as having shared access. I
just choose the file click Submit and it works fine for them. So why
not here?


What has this to do with shared folders on your system? All you need is to
understand the security implications and configure your system accordingly.

Cheers,

--
Joerg Jooss
jo*********@gmx.net
Nov 16 '05 #3

P: n/a
R Reyes wrote:
both actually, but the one that works is PUT. i don't think there is
a problem with the code since it works some times.
Note that in case of PUT,
myHttpWebRequest.ContentType="application/x-www-form-urlencoded";
should rather be the uploaded file's content type, not a form submit.
Actually, this content type is always wrong -- no browser performs file
uploads this way.
it only breaks
when i am switching folders from the shared folders on my computer to
the unshared ones.


Excuse my ignorance, but I'm still not sure what a shared folder really is?
A file share? Again, the key is allowing the web server process (PUT) or the
application server process (POST) to write to target directory.

Cheers,

--
Joerg Jooss
jo*********@gmx.net
Nov 16 '05 #4

P: n/a
both actually, but the one that works is PUT. i don't think there is a
problem with the code since it works some times. it only breaks when i am
switching folders from the shared folders on my computer to the unshared
ones. but like i said, having them shared shouldn't matter because if i'm
able to upload to different websites then it shouldn't have to be different
with my project.

Here is my code:
strAttachFile = "C:\temp\blah.txt";
string strFileName = strAttachFile;
strFileName = Path.GetFileName(strFileName);
// Upload the file to a web server using the HttpWebRequest object
// When we create the object we will provide the server path
// and name of the file we are saving
// HttpWebRequest myHttpWebRequest =
(HttpWebRequest)WebRequest.Create("http://www.somelocation.com:8080/"+strFileName);
// The client path and name of the file we are uploading
BinaryReader rdr = new BinaryReader(File.OpenRead(@strAttachFile));
byte[] data = rdr.ReadBytes((int)rdr.BaseStream.Length);
myHttpWebRequest.Method = "PUT";
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.SendChunked = true;
myHttpWebRequest.Timeout = 10000;
myHttpWebRequest.ContentLength = data.Length;
myHttpWebRequest.KeepAlive = true;
Stream s = myHttpWebRequest.GetRequestStream();
s.Write(data, 0, data.Length);
s.Close();
HttpWebResponse myHttpWebResponse =
(HttpWebResponse)myHttpWebRequest.GetResponse();
myHttpWebResponse.Close();

"Joerg Jooss" wrote:
R Reyes wrote:
Two different web servers I have tried, here they are

Here is the first on a remote web server. I think this is probably a
permissions error and am trying to figure out exactly which ones
because read/write are granted...
File upload failed: System.Net.WebException: The remote server
returned an error: (405) Method Not Allowed.
at System.Net.HttpWebRequest.CheckFinalStatus()
at System.Net.HttpWebRequest.EndGetResponse(IAsyncRes ult
asyncResult) at System.Net.HttpWebRequest.GetResponse()
at myProject.ForumSubmit.uploadFile(String strAttachFile) in
C:\Inetpub\wwwroot\myProject\ForumSubmit.aspx.cs:l ine 181


What did you try? A PUT? A POST?
Here is the second connection which is just to another folder on my
computer...I also have folder with read/write access so I am not sure
why access is denied.
File upload failed: System.UnauthorizedAccessException: Access to the
path "C:\public\tempFiles\work\docs\myDoc_.doc" is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
access, FileShare share, Int32 bufferSize, Boolean useAsync, String
msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess
access, FileShare share)
at System.IO.File.OpenRead(String path)
at myProject.ForumSubmit.uploadFile(String strAttachFile) in
c:\inetpub\wwwroot\myProject\forumsubmit.aspx.cs:l ine 170


Does the ASP.NET process have write permission for
C:\public\tempFiles\work\docs?
I'm not sure why it's not working or why a folder needs certain
access.


Because of security? It's not a good idea to allow exposed services like a
web server or an application server to do everything on your production
server.
Whenever I try uploading files from my computer to any forum
online they don't need to see my folders as having shared access. I
just choose the file click Submit and it works fine for them. So why
not here?


What has this to do with shared folders on your system? All you need is to
understand the security implications and configure your system accordingly.

Cheers,

--
Joerg Jooss
jo*********@gmx.net

Nov 16 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.