Upload file without user interaction in vba

G

google.com

Hi there!

I've been digging around looking for a sample on how to upload a file
without user action. I found the following article covering the area:

http://www.motobit.com/tips/detpg_uploadvbaie/


It describes the vba code required to handle a very simple upload
form:

<Form Action=http://127.0.0.30/util/up/free/upload.asp
Method=Post ENCTYPE="multipart/form-data">
<Input Type=File Name=FileField>
<Input Type=Submit>
</Form>

And then the VBA comes here:

'Upload file using input type=file
Sub UploadFile(DestURL As String, FileName As String, _
Optional ByVal FieldName As String = "File")
Dim sFormData As String, d As String

'Boundary of fields.
'Be sure this string is Not In the source file
Const Boundary As String =
"---------------------------0123456789012"

'Get source file As a string.
sFormData = GetFile(FileName)

'Build source form with file contents
d = "--" + Boundary + vbCrLf
d = d + "Content-Disposition: form-data; name=""" + FieldName +
""";"
d = d + " filename=""" + FileName + """" + vbCrLf
d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
d = d + sFormData
d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf

'Post the data To the destination URL
IEPostStringRequest DestURL, d, Boundary
End Sub

My problem is that my form looks like this:

<form action="upload.asp?
action=upload&type=product&item=pic1&element=&id=3170&w=1000&h=1000&maxw=200&maxh=5000"
method="post" name="upload" enctype="multipart/form-data">
<input type="hidden" name="type" value="product">
<input type="hidden" name="item" value="pic1">
<input type="hidden" name="element" value="">
<input type="hidden" name="id" value="3170">
<input type="hidden" name="w" value="1000">
<input type="hidden" name="h" value="1000">
<input type="file" name="picture" size="28">
<input type="submit" value=" upload "">
</form>

So how do I modify the above UploadFile sub, so that it includes all
the fields in the form?

Any help appreciated, because I have to upload 1000+ files 8-()


So any suggestions??

/hco
 
D

Dave Anderson

<Form Action=http://127.0.0.30/util/up/free/upload.asp
Method=Post ENCTYPE="multipart/form-data">
<Input Type=File Name=FileField>
<Input Type=Submit>
</Form>

And then the VBA comes here:

'Upload file using input type=file ...

I find it highly unlikely you are using VBA in ASP. You probably mean
VBScript.


...how do I modify the above UploadFile sub, so that it
includes all the fields in the form?

1. Be prepared to parse *all* of the regions to discover the
non-file form data
2. Use a component
3. Use some other technology, like ASP.NET
 
H

hco

Hi Dave

It is actually VBA, but that is besides the point.

I'm not looking for the asp code to recieve the posted form, but the
code to mimic the post of the form to the server.

In other words, my problem is how to build the sourceform so that it
includes the filestream AND the other fields on the form. So how do I
modify the "build" part below, so it includes the fields on the form
i'm trying to post?


'Build source form with file contents
d = "--" + Boundary + vbCrLf
d = d + "Content-Disposition: form-data; name=""" + FieldName +
""";"
d = d + " filename=""" + FileName + """" + vbCrLf
d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
d = d + sFormData
d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf

I'm not sure where my question belongs, so If you have any suggestions
for a better place to ask, please let me know ;-)

/hco
 
D

Dave Anderson

It is actually VBA, but that is besides the point.

I'm not looking for the asp code to recieve the posted form,
but the code to mimic the post of the form to the server.

Sorry. You can probably understand why I thought that your use of
<form action=path/upload.asp> suggests an ASP solution is sought.
^^^^^^^^^^

In other words, my problem is how to build the sourceform so
that it includes the filestream AND the other fields on the
form. So how do I modify the "build" part below, so it includes
the fields on the form i'm trying to post?

As I said, parse all of the regions. I cannot overstate the value of the
LiveHTTPHeaders extension for Firefox. Using a test form with three hidden
inputs and a file input, I was able to grab the entire request, including
the following:

Content-Type: multipart/form-data;
boundary=---------------------------29227157615760
Content-Length: 39804
-----------------------------29227157615760
Content-Disposition: form-data; name="Hidden1"

ValueOfHidden1
-----------------------------29227157615760
Content-Disposition: form-data; name="Hidden2"

ValueOfHidden2
-----------------------------29227157615760
Content-Disposition: form-data; name="Hidden3"

ValueOfHidden3
-----------------------------29227157615760
Content-Disposition: form-data; name="File1"; filename="135de8c6.jpg"
Content-Type: image/jpeg

{encoded binary data}
-----------------------------29227157615760--


So it seems to me you want to discover the region delimiter (or boundary)
and use it to define the regions corresponding to each input. Then start
parsing the regions. I have no doubt it will take work, but the above
example should give you something to work from.
 
H

hco

Hi Dave,

Thanks a lot! I think the http header thing will give me the
information I need to be able to construct the form.

I'll get back when i figure out how to construct the formdata.

/hc
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,008
Latest member
HaroldDark

Latest Threads

Top