PDA

Click to See Complete Forum and Search --> : uploading a file to web server using internet transffer control and cgi script


greatrohit
Aug 29th, 1999, 12:34 PM
I am building a client application in vb. This application is for uploading a file to a web server. The server has a CGI application which uploads the file from the client. The vb application on the client(which i am suppose to make) communicates with the CGI application on server through http, providing it the path of the file(on the client) to be uploaded. Along with file path it also has to send the comment given by user which is also processed by the CGI application.
I am using internet transfer control in my application. I am using "execute" command and in it i am using "post" method.
codes are as follows

strurl="http:// url / directory /upldfl.cgi"
strformdata = "upfile = c:\dir1\testfile5 note=xyz"
Inet1.Execute strurl, "POST", strformdata, "Content-Type : multipart/form-data enctype : multipart/form-data"

Error from the server is "Boundary not provided: probably a bug in your server at ./cgi-lib.pl line 417." But this client application has already been made in HTML and is properly communicating with the cgi application at server end. Thus i dont think there is any problem with cgi script. You can see this application in HTML by going to http://edi.delhi.nic.in/~valsa/fu.html

I have doubts whether
1. strformdata = "upfile = c:\dir1\testfile5 note=xyz" is correct. Do we specify multiple parameters(upfile,note) by puting a space in between.

2. Inet1.Execute strurl, "POST", strformdata, "Content-Type :multipart/form-data enctype : multipart/form-data" & vbcrlf
Are different parameters(content-type,enctype) in header field seperated by a space.

3. Is the content-type used correct.


I tried very hard to find some material and examples on it but could not. The examples provided dont pass multiple parameter and no example for file uploading is provided using internet control tool and http.

Please help me and if possible inform me where i can get this information.

Aug 29th, 1999, 10:20 PM
I think your string needs to be like:
"variable1=value1&variable2=value2"
Notice the ampersand "&".
So try:
strformdata = "upfile=c:\dir1\testfile5&note=xyz"
However, if you need spaces, they are replaced with plus "+" symbols. Notice the URL for this post: http://www.vb-world.net/cgi-bin/postings.cgi?action=reply&forum=Internet+Development&number=4&topic=000548.cgi&TopicSubject=uploading+a+file+to+web+server+using+internet+transffer+ control+and+cgi+script+

Aug 29th, 1999, 10:23 PM
Your specific StringVariable got posted badly due to some built in commands for this post program. Take a look at my example, I'm sure you'll see what I mean.

greatrohit
Aug 30th, 1999, 09:39 AM
Thanks for replying,VirtuallyVB.

I tried the following code
strurl="http://edi.delhi.nic.in/valsa-cgi-bin/upldfl.cgi"
strformdata="upfile=c:\trainees\testfile5&note=xyz"
Inet1.Execute strurl, "post", strformdata

but it gives error "content-type not specified"
On giving content-type:

Inet1.Execute strurl, "Post", strformdata, "content-type:multipart/form-data"

It gives error:
"Boundary not provided: probably a bug in your server"

But i dont think there is a bug in server as the same code in CGI at server is being run properly by a code in HTML.

I got the relevent information from MSDN library(Internet transffer control and execute method) and RFC 1867 (which is Form based file upload in HTML)

Aug 31st, 1999, 08:52 PM
Welcome to the wonderfull world of Microsoft!

I had an intermittent problem with the Inet control which was never resolved and I lost interest. Maybe you can get help from the following post: http://www.vb-world.net/ubb/Forum4/HTML/000210.html

TJP
Sep 18th, 1999, 06:41 PM
"I tried the following code
strurl="http://edi.delhi.nic.in/valsa-cgi-bin/upldfl.cgi"
strformdata="upfile=c:\trainees\testfile5¬e=xyz"
Inet1.Execute strurl, "post", strformdata"

Well I dont know much about the Inet control but I do know a little about CGI. From the above the cgi prgram is located here: http://edi.delhi.nic.in/valsa-cgi-bin/upldfl.cgi
and the 2 variables you want the Program to parse are:
1 - upfile=c:\trainees\testfile5¬
2 - e=xyz
And i see that you are trying to use the post method. Well I am pretty sure that you do not necessarily have to use the "POST" method for your cgi program to recognize what you want it to do. Try posting it like this with "GET":
"http://edi.delhi.nic.in/valsa-cgi-bin/upldfl.cgi?upfile=c:\trainees\testfile5¬&e=xyz"

Hope this helps and works!

TJP

TJP
Sep 18th, 1999, 06:52 PM
Oops I just read your first question above..
and it looks liek the second parameter is note=xyz so use this instead. http://edi.delhi.nic.in/valsa-cgi-bin/upldfl.cgi?upfile=c:\trainees\testfile5&note=xyz

ihoscar
Feb 28th, 2000, 05:18 PM
Im trying to do the exact same thing!
Did you manage to do it??? Please help me if
you did...

I have read the file to binary, but when I post it I only get like the 7 first bytes?
The code looks like this:
(ReadFile reads the txtfile.Caption to binary)
I think the problem is at "boundary" or "content-length" or something...

oHttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=--------------AaB03x"
strBody = _
"--------------AaB03x" & vbCrLf & _
"Content-Disposition: form-data;name=""p_filename""; filename=""" & txtfile.Caption & """" & vbCrLf & _
"Content-Type: application/vnd.ms-word" & vbCrLf & vbCrLf & _
ReadFile(txtfile.Caption) & vbCrLf & _
"--------------AaB03x"