Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP General > upload large files not working

Reply
Thread Tools

upload large files not working

 
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-01-2005
Hello Everyone,
I have code that uploads files in asp. It seems to be working however
on files > 200kb it bombs and i don't know why. Does anyone have any
idea of why this would occur and what i can do to fix it? Thank you in
advance!!!!

 
Reply With Quote
 
 
 
 
Tim Slattery
Guest
Posts: n/a
 
      12-01-2005
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

>Hello Everyone,
>I have code that uploads files in asp. It seems to be working however
>on files > 200kb it bombs and i don't know why. Does anyone have any
>idea of why this would occur and what i can do to fix it? Thank you in
>advance!!!!


Are you using a component to upload the file? Does that component have
a limit somewhere? If you're using VBScript or serverside Javascript
to do it, can you post the code?

This question cannot be answered in a vacuum.

--
Tim Slattery
MS MVP(DTS)
(E-Mail Removed)
 
Reply With Quote
 
 
 
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-01-2005

Tim Slattery wrote:
> (E-Mail Removed) wrote:
>
> >Hello Everyone,
> >I have code that uploads files in asp. It seems to be working however
> >on files > 200kb it bombs and i don't know why. Does anyone have any
> >idea of why this would occur and what i can do to fix it? Thank you in
> >advance!!!!

>
> Are you using a component to upload the file? Does that component have
> a limit somewhere? If you're using VBScript or serverside Javascript
> to do it, can you post the code?
>
> This question cannot be answered in a vacuum.
>
> --
> Tim Slattery
> MS MVP(DTS)
> (E-Mail Removed)


I am not using a component to upload the file and there is a limit but
it's 1024k which is WELL above the files size that i am trying to
upload. I will post the code later tonight as i don't have it with me
at the moment. I am using VBScript and the source code was not created
by me i'm taking it over for another company. I will post the code
around 8pm tonight. thanks
Thanks for your response.
Erin

 
Reply With Quote
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-02-2005
As promised here is the code, i thikn this is all that is used to do
the uploading (the second function is quite big).. thanks so much for
looking at this!!!!!

The first method called

Sub
ProcessUpload(pau_thePath,pau_Extensions,pau_Redir ect,pau_storeType,pau_sizeLimit,pau_nameConflict,p au_requireUpload,pau_minWidth,pau_minHeight,pau_ma xWidth,pau_maxHeight,pau_saveWidth,pau_saveHeight, pau_timeout)
Server.ScriptTimeout = pau_timeout
pau_doPreUploadChecks pau_sizeLimit
RequestBin = Request.BinaryRead(Request.TotalBytes)
Set UploadRequest = CreateObject("Scripting.Dictionary")
pau_BuildUploadRequest RequestBin, pau_thePath, pau_storeType,
pau_sizeLimit, pau_nameConflict
If pau_Redirect <> "" Then
If UploadQueryString <> "" Then
pau_Redirect = pau_Redirect & "?" & UploadQueryString
End If'

Response.Redirect(pau_Redirect)
end if
End Sub

================================================== =========
pau_builduploadrequest

Sub
pau_BuildUploadRequest(RequestBin,UploadDirectory, storeType,sizeLimit,nameConflict)
Dim Boundary, FormInfo, TypeArr, BoundaryArr, BoundaryPos, Pos, PosLen
Dim PosFile, Name, PosBound, FileName, ContentType, Value, ValueBeg,
ValueEnd, ValueLen
'Check content type
TypeArr = Split(Request.ServerVariables("HTTP_Content_Type") , ";")
if Trim(TypeArr(0)) <> "multipart/form-data" then
Response.Write "<b>Form was submitted with no
ENCTYPE=""multipart/form-data""</b><br/>"
Response.Write "Please correct and <a
href=""javascript:history.back(1)"">try again</a>"
Response.End
end if
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(13) ))
if PosEnd = 0 then
Response.Write "<b>Form was submitted with no
ENCTYPE=""multipart/form-data""</b><br>"
Response.Write "Please correct and <A
HREF=""javascript:history.back(1)"">try again</a>"
Response.End
end if
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary &
pau_getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos =
InstrB(BoundaryPos,RequestBin,pau_getByteString("C ontent-Disposition"))
Pos = InstrB(Pos,RequestBin,pau_getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(34) ))
Name = LCase(pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg)))
PosFile =
InstrB(BoundaryPos,RequestBin,pau_getByteString("f ilename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(34) ))
FileName = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
FileName =
pau_RemoveInvalidChars(Mid(FileName,InStrRev(FileN ame,"\")+1))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,pau_getByteString("Conten t-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(13) ))
'Add content-type to dictionary object
ContentType = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = FileName
ValueBeg = PosBeg-1
ValueLen = PosEnd-Posbeg
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,pau_getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
ValueBeg = 0
ValueEnd = 0
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value
UploadControl.Add "ValueBeg" , ValueBeg
UploadControl.Add "ValueLen" , ValueLen
'Add dictionary object to main dictionary
if UploadRequest.Exists(name) then
UploadRequest(name).Item("Value") =
UploadRequest(name).Item("Value") & "," & Value
else
UploadRequest.Add name, UploadControl
end if
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),Requ estBin,boundary)
Loop
Dim GP_keys, GP_i, GP_curKey, GP_value, GP_valueBeg, GP_valueLen,
GP_curPath, GP_FullPath
Dim GP_CurFileName, GP_FullFileName, fso, GP_BegFolder, GP_RelFolder,
GP_FileExist, Begin_Name_Num
Dim orgUploadDirectory
if InStr(UploadDirectory,"""") > 0 then
'on error resume next
orgUploadDirectory = UploadDirectory
UploadDirectory = eval(UploadDirectory)
if err then
Response.Write "<b>Upload folder is invalid</b><br/><br/>"
Response.Write "Upload Folder: " & Trim(orgUploadDirectory) &
"<br/>"
Response.Write "Please correct and <a
href=""javascript:history.back(1)"">try again</a>"
err.clear
response.End
end if
'on error goto 0
end if
GP_keys = UploadRequest.Keys
for GP_i = 0 to UploadRequest.Count - 1
GP_curKey = GP_keys(GP_i)
'Save all uploaded files
if UploadRequest.Item(GP_curKey).Item("FileName") <> "" then
GP_value = UploadRequest.Item(GP_curKey).Item("Value")
GP_valueBeg = UploadRequest.Item(GP_curKey).Item("ValueBeg")
GP_valueLen = UploadRequest.Item(GP_curKey).Item("ValueLen")
'Get the path
if InStr(UploadDirectory,"\") > 0 then
GP_curPath = UploadDirectory
if Mid(GP_curPath,Len(GP_curPath),1) <> "\" then
GP_curPath = GP_curPath & "\"
end if
GP_FullPath = GP_curPath
else
GP_curPath = Request.ServerVariables("PATH_INFO")
GP_curPath = Trim(Mid(GP_curPath,1,InStrRev(GP_curPath,"/")) &
UploadDirectory)
if Mid(GP_curPath,Len(GP_curPath),1) <> "/" then
GP_curPath = GP_curPath & "/"
end if
GP_FullPath = Trim(Server.mappath(GP_curPath))
end if
if GP_valueLen = 0 then
Response.Write "<b>An error has occured saving uploaded
file!</b><br/><br/>"
Response.Write "Filename: " & Trim(GP_curPath) &
UploadRequest.Item(GP_curKey).Item("FileName") & "<br/>"
Response.Write "File does not exists or is empty.<br/>"
Response.Write "Please correct and <a
href=""javascript:history.back(1)"">try again</a>"
response.End
end if
'Create a Stream instance
Dim GP_strm1, GP_strm2
Set GP_strm1 = Server.CreateObject("ADODB.Stream")
Set GP_strm2 = Server.CreateObject("ADODB.Stream")
'Open the stream
GP_strm1.Open
GP_strm1.Type = 1 'Binary
GP_strm2.Open
GP_strm2.Type = 1 'Binary
GP_strm1.Write RequestBin
GP_strm1.Position = GP_ValueBeg
GP_strm1.CopyTo GP_strm2,GP_ValueLen
'Create and Write to a File
GP_CurFileName = UploadRequest.Item(GP_curKey).Item("FileName")

GP_FullFileName = GP_FullPath & "\" & GP_CurFileName
Set fso = CreateObject("Scripting.FileSystemObject")
pau_AutoCreatePath GP_FullPath
'Check if the file already exist
GP_FileExist = false
If fso.FileExists(GP_FullFileName) Then
GP_FileExist = true
End If
if nameConflict = "error" and GP_FileExist then
Response.Write "<b>File already exists!</b><br/><br/>"
Response.Write "Please correct and <a
href=""javascript:history.back(1)"">try again</a>"
GP_strm1.Close
GP_strm2.Close
response.End
end if
if ((nameConflict = "over" or nameConflict = "uniq") and
GP_FileExist) or (NOT GP_FileExist) then
if nameConflict = "uniq" and GP_FileExist then
Begin_Name_Num = 0
while GP_FileExist
Begin_Name_Num = Begin_Name_Num + 1
GP_FullFileName = Trim(GP_FullPath)& "\" &
fso.GetBaseName(GP_CurFileName) & "_" & Begin_Name_Num & "." &
fso.GetExtensionName(GP_CurFileName)
GP_FileExist = fso.FileExists(GP_FullFileName)
wend
UploadRequest.Item(GP_curKey).Item("FileName") =
fso.GetBaseName(GP_CurFileName) & "_" & Begin_Name_Num & "." &
fso.GetExtensionName(GP_CurFileName)
UploadRequest.Item(GP_curKey).Item("Value") =
UploadRequest.Item(GP_curKey).Item("FileName")
end if
on error resume next
GP_strm2.SaveToFile GP_FullFileName
if err then
err.clear
Dim txt_stream, file_bin
Set txt_stream = fso.CreateTextFile(GP_FullFileName, True)
file_bin = pau_getString(MidB(RequestBin, GP_ValueBeg+1,
GP_ValueLen))
txt_stream.Write file_bin
txt_stream.Close
if err then
GP_strm1.Close
GP_strm2.Close
Response.Write "<b>An error has occured saving uploaded
file!</b><br/><br/>"
Response.Write "Filename: " & GP_FullFileName & "<br/><br/>"
if fso.FileExists(GP_FullFileName) then
Dim f
Response.Write "File exists on server!<br/>"
Set f = fso.GetFile(GP_FullFileName)
Response.Write "Attributes(" & f.attributes & "|" &
f.parentfolder.attributes & "): "
if f.attributes and 1 then
Response.Write "ReadOnly "
end if
if f.attributes and 2 then
Response.Write "Hidden "
end if
if f.attributes and 4 then
Response.Write "System "
end if
if f.attributes and 16 then
Response.Write "Directory "
end if
Response.Write "<br/><br/>"
end if
Response.Write "Error # " & CStr(Err.Number) & " " &
Err.Description & "<br/>"
Response.Write "in " & Err.Source & "(" & GP_strm2.state &
")<br/>"
response.End
end if
end if
GP_strm1.Close
GP_strm2.Close
if storeType = "path" then
UploadRequest.Item(GP_curKey).Item("Value") = GP_curPath &
UploadRequest.Item(GP_curKey).Item("Value")
end if
on error goto 0
end if
end if
next
End Sub

 
Reply With Quote
 
Tim Slattery
Guest
Posts: n/a
 
      12-02-2005
(E-Mail Removed) wrote:

>As promised here is the code, i thikn this is all that is used to do
>the uploading (the second function is quite big).. thanks so much for
>looking at this!!!!!
>
>The first method called
>
>Sub
>ProcessUpload(pau_thePath, pau_Extensions, pau_Redirect, pau_storeType, pau_sizeLimit,
> pau_nameConflict, pau_requireUpload, pau_minWidth, pau_minHeight, pau_maxWidth,
> pau_maxHeight, pau_saveWidth, pau_saveHeight, pau_timeout)


These arguments include a size limit and a timeout value. The size
limit is passed to pau_BuildUploadRequest, which ignores it. The
timeout is used to set Server.ScriptTimeout. If the timeout value is
not large enough, it could be hit before a huge file has finished
uploading.

You never did say just *how* it bombs with a large file. What messages
appear?

> Server.ScriptTimeout = pau_timeout
> pau_doPreUploadChecks pau_sizeLimit


Don't know what pau_doPreUploadChecks does with the size limit - or
what the size limit is, for that matter.

> RequestBin = Request.BinaryRead(Request.TotalBytes)


Total size of file(s) to be uploaded, I guess.

> Set UploadRequest = CreateObject("Scripting.Dictionary")


I assume that the UploadRequest hash is global, since
pau_BuildUploadRequest uses it

> pau_BuildUploadRequest RequestBin, pau_thePath, pau_storeType,
> pau_sizeLimit, pau_nameConflict


Size limit is passed here, but the sub doesn't use it.

> If pau_Redirect <> "" Then
> If UploadQueryString <> "" Then
> pau_Redirect = pau_Redirect & "?" & UploadQueryString
> End If'
>
> Response.Redirect(pau_Redirect)
> end if
>End Sub
>
>================================================= ==========
>pau_builduploadrequest
>
>Sub
>pau_BuildUploadRequest(RequestBin,UploadDirectory ,storeType,sizeLimit,nameConflict)
> Dim Boundary, FormInfo, TypeArr, BoundaryArr, BoundaryPos, Pos, PosLen
> Dim PosFile, Name, PosBound, FileName, ContentType, Value, ValueBeg,
>ValueEnd, ValueLen


--
Tim Slattery
MS MVP(DTS)
(E-Mail Removed)
 
Reply With Quote
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-02-2005
Hi Tim,
thanks for your reply, actually i just get a 500 internal server error
and that's the extent of it. I am pretty sure it has to do with the
size of the file because any file under 200 kb will upload fine and I
only get the error when i try to upload a bigger file. So if i up the
timeout time and the filesize should that do the trick? or at least is
it a place to start?
Thanks,
Erin

 
Reply With Quote
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-02-2005
this is pau_doPreUploadChecks

Sub pau_doPreUploadChecks(sizeLimit)
Dim checkADOConn, AdoVersion, Length
'Check ADO Version
set checkADOConn = Server.CreateObject("ADODB.Connection")
on error resume next
adoVersion = CSng(checkADOConn.Version)
if err then
adoVersion = Replace(checkADOConn.Version,".",",")
adoVersion = CSng(adoVersion)
end if
err.clear
on error goto 0
set checkADOConn = Nothing
if adoVersion < 2.5 then
Response.Write "<b>You don't have ADO 2.5 installed on the
server.</b><br/>"
Response.Write "The File Upload extension needs ADO 2.5 or greater to
run properly.<br/>"
Response.Write "You can download the latest MDAC (ADO is included)
from <a
href=""www.microsoft.com/data"">www.microsoft.com/data</a><br/>"
Response.End
end if
'Check content length if needed
Length = CLng(Request.ServerVariables("HTTP_Content_Length" )) 'Get
Content-Length header
If sizeLimit <> "" Then
sizeLimit = CLng(sizeLimit) * 1024
If Length > sizeLimit Then
Response.Write "Upload size " & FormatNumber(Length, 0) & "B exceeds
limit of " & FormatNumber(sizeLimit, 0) & "B<br/>"
Response.Write "Please correct and <a
href=""javascript:history.back(1)"">try again</a>"
Response.End
End If
End If
End Sub

 
Reply With Quote
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-02-2005
another thing i should mention, i don't get the error message "exceeds
limit of ..." it just simply gives me a 500 internal server error.
Thanks again,
Erin

 
Reply With Quote
 
Bob Barrows [MVP]
Guest
Posts: n/a
 
      12-02-2005
(E-Mail Removed) wrote:
> another thing i should mention, i don't get the error message "exceeds
> limit of ..." it just simply gives me a 500 internal server error.
> Thanks again,
> Erin

http://www.aspfaq.com/show.asp?id=2109
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.


 
Reply With Quote
 
erin.sebastian@cowaninsurancegroup.com
Guest
Posts: n/a
 
      12-03-2005
Thanks that's awesome!!
now i am getting an "operation not allowed" on this line
RequestBin = Request.BinaryRead(Request.TotalBytes)
any idea's why????
Thanks
Erin

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
upload very large files =?Utf-8?B?U2FuZHk=?= ASP .Net 2 11-03-2006 04:55 AM
Can not upload large files (>2 megs) to image field. "Cannot find server" message returned... Charlie@CBFC ASP .Net 1 05-03-2005 02:49 AM
Where to upload large files? optxx@juno.com Digital Photography 21 12-17-2004 12:26 AM
Upload large files to server problem Raj Tripathi ASP .Net 1 11-20-2003 02:28 PM
Backing Up Large Files..Or A Large Amount Of Files Scott D. Weber For Unuathorized Thoughts Inc. Computer Support 1 09-19-2003 07:28 PM



Advertisments