Avatar billede software Nybegynder
15. januar 2004 - 14:14 Der er 15 kommentarer og
1 løsning

Subscript out of range

Hej

Jeg har nu forsøgt mig med en del forskellige scripts til at uploade billeder med, men havde ikke kunne få nogen af dem til at fungere, på nær et. Det fungere som det skal på min egen com, men efter at jeg har uplodet det til mit webhotel, får jeg følgende fejl:

Subscript out of range: '[number: 0]'

/FilePost2.asp, line 59

scriptet har i her (det er temmelig langt):

<%
response.buffer = true

if Session("login") <> "loged_in" then
    Response.Redirect("admin_login.asp")
else
'Adjust this depending on the size of the files you'll
'be expecting; longer timeout for larger files!
Server.ScriptTimeout = 5400

Const ForWriting = 2
Const TristateTrue = -1
CrLf = Chr(13) & Chr(10)

'This function retreives a field's name
Function GetFieldName(infoStr)
    sPos = InStr(infoStr, "name=")
    EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")
    If EndPos = 0 Then
        EndPos = inStr(sPos + 6, infoStr, Chr(34))
    End If
    GetFieldName = Mid(infoStr, sPos + 6, endPos - _
        (sPos + 6))
End Function

'This function retreives a file field's filename
Function GetFileName(infoStr)
    sPos = InStr(infoStr, "filename=")
    EndPos = InStr(infoStr, Chr(34) & CrLf)
    GetFileName = Mid(infoStr, sPos + 10, EndPos - _
        (sPos + 10))
End Function

'This function retreives a file field's MIME type
Function GetFileType(infoStr)
    sPos = InStr(infoStr, "Content-Type: ")
    GetFileType = Mid(infoStr, sPos + 14)
End Function

'Yank the file (and anything else) that was posted
PostData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
'Careful! It's binary! So, let's change it into
'something a bit more manageable.
For nIndex = 1 to LenB(biData)
    PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))
Next

'Having used BinaryRead, the Request.Form collection is
'no longer available to us. So, we have to parse the
'request variables ourselves!
'First, let's find that encoding type!
ContentType = Request.ServerVariables( _
    "HTTP_CONTENT_TYPE")
ctArray = Split(ContentType, ";")
'File posts only work well when the encoding is
'"multipart/form-data", so let's check for that!
If Trim(ctArray(0)) = "multipart/form-data" Then
    ErrMsg = ""
    ' grab the form boundary...
    bArray = Split(Trim(ctArray(1)), "=")
    Boundary = Trim(bArray(1))
    'Now use that to split up all the variables!
    FormData = Split(PostData, Boundary)
    'Extract the information for each variable and its data
    Dim myRequest, myRequestFiles(9, 3)
    Set myRequest = CreateObject("Scripting.Dictionary")
    FileCount = 0
    For x = 0 to UBound(FormData)
        'Two CrLfs mark the end of the information about
        'this field; everything after that is the value
        InfoEnd = InStr(FormData(x), CrLf & CrLf)
        If InfoEnd > 0 Then
            'Get info for this field, minus stuff at the end
            varInfo = Mid(FormData(x), 3, InfoEnd - 3)
            'Get value for this field, being sure to skip
            'CrLf pairs at the start and the CrLf at the end
            varValue = Mid(FormData(x), InfoEnd + 4, _
                Len(FormData(x)) - InfoEnd - 7)
            'Is this a file?
            If (InStr(varInfo, "filename=") > 0) Then
                'Place it into our files array
                '(While this supports more than one file
                'uploaded at a time we only consider the
                'single file case in this example)
                myRequestFiles(FileCount, 0) = GetFieldName( _
                    varInfo)
                myRequestFiles(FileCount, 1) = varValue
                myRequestFiles(FileCount, 2) = GetFileName( _
                    varInfo)
                myRequestFiles(FileCount, 3) = GetFileType( _
                    varInfo)
                FileCount = FileCount + 1
            Else
                'It's a regular field
                myRequest.add GetFieldName(varInfo), varValue
            End If
        End If
    Next
Else
    ErrMsg = "Wrong encoding type!"
End If

'Save the actual posted file
'If supporting more than one file, turn this into a loop!

Set lf = server.createObject("Scripting.FileSystemObject")
If myRequest("filename") = "original" Then
    'Use the filename that came with the file
    'At this point, you need to determine what sort of
    'client sent the file. Macintoshes only send the file
    'name, with no path information, while Windows clients
    'send the entire path of the file that was selected
    BrowserType = UCase(Request.ServerVariables( _
        "HTTP_USER_AGENT"))
    If (InStr(BrowserType, "WIN") > 0) Then
        'It's Windows; yank the filename off the end!
        sPos = InStrRev(myRequestFiles(0, 2), "\")
        fName = Mid(myRequestFiles(0, 2), sPos + 1)
    End If
    If (InStr(BrowserType, "MAC") > 0) Then
        'It's a Mac. Simple.
        '(Mac filenames can contain characters that are
        'illegal under Windows, so look out for that!)
        fName = myRequestFiles(0, 2)
    End If
    'If your upload path is different, set that here
    FilePath = "../images/" & fName
Else
    'Use the user-specified filename instead
    'If your upload path is different, set that here
    FilePath = "../images/" & myRequest("userSpecifiedName")
End If
SavePath = Server.MapPath(FilePath)
Set SaveFile = lf.CreateTextFile(SavePath, True)
SaveFile.Write(myRequestFiles(0, 1))
SaveFile.Close

'IIS may hang if you don't explicitly return SOMETHING.
'So, redirect to another page or provide some kind of
'feedback below...
%>
<html>
<body>
<% If ErrMsg = "" Then %>
    Billedet er nu uploadet til mappen "Images"<br><br>
    <a href="default.asp">Klik her</a> for at vende tilbage
<% Else %>
    <%= ErrMsg %>
<% End If %>
</body>
</html>
<% end if %>

linie 59 er hvor der står:

If Trim(ctArray(0)) = "multipart/form-data" Then

Mvh
software
Avatar billede websam Nybegynder
15. januar 2004 - 14:21 #1
Så vidt jeg husker er "Subscript out of range" fordi der ikke er nogen ctArray(0) med værdien 0

/Websam
Avatar billede powerade Nybegynder
15. januar 2004 - 14:24 #2
Skal det ikke være
If Trim(ctArray[0]) = "multipart/form-data" Then
istedet??
Avatar billede powerade Nybegynder
15. januar 2004 - 14:24 #3
Altså med [0] istedet for (0)
Avatar billede software Nybegynder
15. januar 2004 - 14:51 #4
Nej, det skal være med (0)
Avatar billede powerade Nybegynder
15. januar 2004 - 15:09 #5
Hvorfor skriver du overhovedet (0)?? Du lægger jo værdien direkte ind i ctArray..
Så er det ikke bare
If Trim(ctArray) = "multipart/form-data" Then
istedet??
Avatar billede powerade Nybegynder
15. januar 2004 - 15:11 #6
I din kode lægger du en værdi ind sådan her..
ctArray = Split(ContentType, ";")
Hvis det skal være på den anden måde skal du først lave et array med
Dim ctArray(10) (F.eks.)
Og derefter
ctArray(0) = Split(ContentType, ";")
Avatar billede powerade Nybegynder
15. januar 2004 - 15:14 #7
Eller også koger jeg og så ska du bare skrive
If Trim(ctArray("0")) = "multipart/form-data" Then
Avatar billede thesurfer Nybegynder
15. januar 2004 - 15:27 #8
Prøv lige en:
ContentType = Request.ServerVariables("HTTP_CONTENT_TYPE")
response.write "*" & ContentType & "*"

hvis der bare står "**", er der ikke noget i ContentType..

Du kan også se omsætningen af ContentType..
Avatar billede thesurfer Nybegynder
15. januar 2004 - 15:28 #9
Skulle ha' været "opsætningen"..
Avatar billede software Nybegynder
15. januar 2004 - 15:54 #10
okay

hvis jeg prøver powerade's eks. får jeg denne fejl:

Type mismatch

/FilePost2.asp, line 60

hvis jeg prøver at udskrive ContentType står der som det selv bliver nævnt af thesufer, **

og så skal jeg måske lige nævne at jeg ikke har skrevet noget af scriptet selv. det har jeg kopieret, og desuden virker det som det skal på min egen computer, bare ikke når det er blevet uploadet.

Mvh.
software
Avatar billede websam Nybegynder
15. januar 2004 - 16:00 #11
Som powerade skriver skal du declare din ctArray men jeg mener det er nok med :

Dim ctArray()

/Websam
Avatar billede thesurfer Nybegynder
15. januar 2004 - 17:18 #12
Hvis du får "**" ved koden:

ContentType = Request.ServerVariables("HTTP_CONTENT_TYPE")
response.write "*" & ContentType & "*"

Så er det ikke noget i ContentType, og så kan du ikke splitte den ved ";".
Hvis det virker på din computer, men ikke på servere du oploader til, kan det være at serveren blokerer et eller andet du har brug for.. Eller også er der noget, der mangler at blive installeret på den, som du allerede har på din computer.

Men prøv først at dimme ctArray..
Avatar billede software Nybegynder
16. januar 2004 - 08:57 #13
okay, nu har jeg prøvet at dimme ctArray og får samme fejl.

Jeg har også prøvet på et andet webhotel (wannafind) og der virker det som det skal.
Der hvor det ikke virker og helst skulle, er hos B-one. Måske kan scriptet slet ikke bruges hos B-one ??

Mvh. software
Avatar billede software Nybegynder
16. januar 2004 - 09:15 #14
okay, det åbenbart mig som, ikke rigtigt har vist hvad jeg har haft med at gøre.

Jeg skulle jo nok have fortalt jer med det samme, at det er hos B-one at siden skal ligge. Jeg har lige prøvet med et meget simpelt php-script:

<?
if ($submit) {
        if(copy($userfile, "minmappe/$userfile_name")) {
            echo "<script>alert('$userfile_name er nu blevet uploadet');</script>";
        } else {
            echo "kunne ikke uploade skidtet :/";
        }
}
?>

<form name="form" enctype="multipart/form-data" action="<?=$PHP_SELF;?>" method="post">
<input type="file" name="userfile">
<input type="submit" name="submit" value="upload fil -> "><br><br>
</form>

og det virkede.

De skriver dog på deres, iøvrigt totalt mangelfulde hjemmeside, at de understøtter asp og derfor gik jeg udfra at det lange script så også skulle virke.

Nå, men jeg gerne takke for jeres hjælp

Mvh.
Avatar billede thesurfer Nybegynder
16. januar 2004 - 13:54 #15
Hmm.. Det kan være at de kører med Chilli!ASP, som ikke er 100% ASP, men ASP der kører på en Linux server, i stedet for en Windows server.. der er nogle ting den ikke kan finde ud af..

Hvis du mener at spm'et er besvaret, skal du de der kom med løsningen lægge et svar, så de kan få points..
Hvis du overhovedet ikke kunne bruge noget af indlægene, skal du selv lægge et svar og acceptere det.

Med andre ord: Hvis du er "færdig" med spm'et, skal det lukkes.
Avatar billede software Nybegynder
16. januar 2004 - 13:56 #16
okay. Hermed gjort.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester