---
title: "Filuppladdning misslyckas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/133299-filuppladdning-misslyckas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Oputres"
published: "2005-08-25T17:59:01.000Z"
updated: "2005-08-25T21:56:05.000Z"
replies: 5
views: 244
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/133299-filuppladdning-misslyckas"
---

# Filuppladdning misslyckas

## #1 — Oputres, 2005-08-25T17:59Z

Allå!

Nu är jag inne på ett område jag inte behärskar så bra, nämligen filuppladdning och i det här fallet av bilder. Jag har hittat ett skript som jag håller på att anpassa efter mina behov men får följande felmeddelande när jag försöker ladda upp en .jpg-bild:

Objekt krävs.: ''
/public_html/medlemssidor/administration.asp, line 797

Rad 797 ser ut så här:

```
For i = 1 to LenB(fcontent)
[B]File.Write chr(AscB(MidB(fcontent, i, 1)))[/B]
Next
```

Så här ser hela faderullan ut. Notera att den inte är klar och jag vet inte exakt vad alla delar gör men principen är att man laddar upp en fil, funktionen kontrollerar att inte filen redan finns och laddar därefter upp den. Sedan skickas man till skicka.asp där man får skriva en beskrivning av filen i en databas.

Vårsågoda:

```
...
ElseIf Request.QueryString("Do") = "Add" Then
  Select Case(Request.QueryString("What"))

  Case "Bilder"

Dim UPLOAD_PATH, Fso, Folder, Upload, fcontent, allowlist, extension, i, file
UPLOAD_PATH	= Server.MapPath("bildarkiv")
Set Fso		= Server.CreateObject("Scripting.FileSystemObject")
Set Folder	= Fso.getFolder(UPLOAD_PATH)

'Denna rad behövs nog inte eftersom jag använder ElseIf Request.QueryString ovan för att läsa anropet.
'If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then

  Set Upload	= get_upload_files()
  fcontent	= Upload("upload").Item("content")

  allowlist = ".gif,.GIF,.jpg,.JPG,.jpeg,.JPEG,.bmp,.BMP"
  extension = right(extract_filename(Upload("upload").Item("filename")),4)
  If Fso.FileExists(UPLOAD_PATH & "\" & extract_filename(Upload("upload").Item("filename"))) Then
    Response.Write "En fil med det namnet finns redan! Döp om filen du vill ladda upp och prova igen"
    Response.Write "<b><a href='JavaScript:history.go(-1);'>Tillbaka</a></b>"
  Else
    If instr(allowlist,extension) then
      Set File	= Fso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(Upload("upload").Item("filename")))
    Else
      Response.Write "Filen är i felaktigt format. Endast " & allowlist & " är godkända."
      Response.Write "<b><a href='JavaScript:history.go(-1);'>Tillbaka</a></b>"
    End If
  End If

For i = 1 to LenB(fcontent)
File.Write chr(AscB(MidB(fcontent, i, 1)))
Next
File.Close: Set File = Nothing
Session("fil") = extract_filename(Upload("upload").Item("filename"))
Session("visa") = "ok"
'################################################################################## LÄGG IN SKICKA.ASP MED IF-SATS ISTÄLLET
Response.Redirect "skicka.asp"
'################################################################################## LÄGG IN SKICKA.ASP MED IF-SATS ISTÄLLET
'End If

Function get_upload_files()
Dim upload_object, request_binaries, position_start, position_end, boundary, boundary_pos, name, pos_file

Set upload_object	= Server.CreateObject("Scripting.Dictionary")
request_binaries	= Request.BinaryRead(Request.TotalBytes)
position_start		= 1
position_end		= InstrB(position_start, request_binaries, get_byte_string(chr(13)))
boundary		= MidB(request_binaries, position_start, (position_end - position_start))
boundary_pos		= InstrB(1, request_binaries, boundary)

Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
If Not(Response.IsClientConnected) Then Response.End
  position_start	= (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
  position_end		= InstrB(position_start, request_binaries, get_byte_string(chr(34)))

  name			= get_string(MidB(request_binaries, position_start, (position_end - position_start)))
  pos_file		= InstrB(boundary_pos, request_binaries, get_byte_string("filename="))

  If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
    upload_object.Add name, Server.CreateObject("Scripting.Dictionary")
    position_start	= (pos_file + 10)
    position_end	= InstrB(position_start, request_binaries, get_byte_string(chr(34)))
    upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

    position_start	= (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
    position_end	= InstrB(position_start, request_binaries, get_byte_string(chr(13)))
    upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

    position_start	= (position_end + 4)
    position_end	= InstrB(position_start, request_binaries, boundary) - 2
    upload_object.item(name).Add "size", ((position_end - position_start))
    upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))
  End If
boundary_pos	= InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
Loop

Set get_upload_files = upload_object
End Function

Function get_byte_string(str)
Dim cnt
For cnt = 1 to Len(str)
get_byte_string	= get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
Next
End Function

Function get_string(str)
Dim cnt
For cnt = 1 to LenB(str)
get_string = get_string & chr(AscB(MidB(str, cnt, 1))) 
Next
End Function

Function extract_filename(filename)
extract_filename = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
End Function

  End Select

Else
'-------------------------------------- VISA BILDFORMULÄR
%>

<font size="3"><b>Lägg till bild:</b></font><br>
<img src="bilder/main_rule_admin.jpg" width="590"><br>
<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#FFFFCC">
<font size="1">Nedan kan en bild med något av formatet gif, jpg, jpeg, eller bmp laddas upp. Efter uppladdning skett
kan beskrivning skrivas till bilden.</font>
</td></tr></table><br>

<script language="JavaScript">
<!-- 
function blured()
{
for (a in document.links) document.links[a].onfocus = document.links[a].blur;
}
if (document.all)
{
document.onmousedown = blured;
}
// -->
</script>

<form name="frmUpload" method="post" enctype="multipart/form-data" action="administration.asp?AnvId=<% =AnvId %>&Sida=Bilder&Do=Add&What=Bilder">
  <input type="file" name="upload" size="35">&nbsp;<input type="submit" value="Ladda upp">
  <%If Session("mess") <> "" Then%>
    <%=Session("mess")%><%Session("mess") = ""%>
  <%End If%>
</form>
...
```

Permalänk: https://www.webforum.nu/p/133299

## #2 — @nders, 2005-08-25T18:05Z

Då verkar det som att objektet *File* inte är skapat.
Lägg till lite testutskrifter för att försöka ta reda på varför.

Permalänk: https://www.webforum.nu/p/1662814

## #3 — Oputres, 2005-08-25T20:40Z

Nu hittade varför det inte fungerade, filen fanns redan uppladdad, så uppladdningen fungerar alltså. Första gången får jag bara felmeddelandet om att den inte hittar skicka.asp vilken inte heller finns tillgänglig ännu, uppladdningen har alltså gått igenom.

Därför måste det brista i kontrollen om det redan finns en fil i mappen. Jag provade också ladda upp en .zip-fil, vilken inte skall godkännas av den här snutten:

```
  allowlist = ".gif,.GIF,.jpg,.JPG,.jpeg,.JPEG,.bmp,.BMP"
  extension = right(extract_filename(Upload("upload").Item("filename")),4)
  If Fso.FileExists(UPLOAD_PATH & "\" & extract_filename(Upload("upload").Item("filename"))) Then
    Response.Write "En fil med det namnet finns redan! Döp om filen du vill ladda upp och prova igen"
    Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"
  Else
    If instr(allowlist,extension) then
      Set File	= Fso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(Upload("upload").Item("filename")))
    Else
      Response.Write "Filen är i felaktigt format. Endast " & allowlist & " är godkända."
      Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"
    End If
  End If
```

Några tips på varför kontrollen inte fungerar? Kan det ha att göra med att jag slopat:

```
'If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
```

Permalänk: https://www.webforum.nu/p/1662878

## #4 — emission, 2005-08-25T20:55Z

Liten upprensning. Otestad, men kan kanske hjälpa

```
allowlist = "gif,jpg,jpeg,bmp"
filename = extract_filename(Upload("upload").Item("filename"))
extension = Fso.GetExtensionName(filename)
If Fso.FileExists(UPLOAD_PATH & "\" & filename) Then
   Response.Write "En fil med det namnet finns redan! Döp om filen du vill ladda upp och prova igen"
   Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"
Else
   If instr("," & allowlist & ",","," & extension & ",")>0 then
      Set File	= Fso.CreateTextFile(UPLOAD_PATH & "\" & filename)
   Else
      Response.Write "Filen är i felaktigt format. Endast " & allowlist & " är godkända."
      Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"
   End If
End If
```

Permalänk: https://www.webforum.nu/p/1662885

## #5 — Oputres, 2005-08-25T21:46Z

Jag tror jag löser det! Felet består i fetmarkerade områden. Jag ändrade dessa till en Response.Redirect så att man försvinner innan resten av koden körs.

```
If Fso.FileExists(UPLOAD_PATH & "\" & filename) Then
   [B]Response.Write "En fil med det namnet finns redan! Döp om filen du vill ladda upp och prova igen"[/B]
   [B]Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"[/B]
Else
   If instr("," & allowlist & ",","," & extension & ",")>0 then
      Set File	= Fso.CreateTextFile(UPLOAD_PATH & "\" & filename)
   Else
      [B]Response.Write "Filen är i felaktigt format. Endast " & allowlist & " är godkända."[/B]
      [B]Response.Write "<b><a href='java script:history.go(-1);'>Tillbaka</a></b>"[/B]
   End If
End If
```

Obs, koden är från Emission ovan.

På återseende, för så lär det bli senare ;)

Permalänk: https://www.webforum.nu/p/1662906

## #6 — emission, 2005-08-25T21:56Z

Gött. Btw, du bör lägga till en lite lcase, så att skiftläget på filslutet inte spelar någon roll

extension = lcase(Fso.GetExtensionName(filename))

Permalänk: https://www.webforum.nu/p/1662910

---

Tråden på webben: https://www.webforum.nu/amne/asp/133299-filuppladdning-misslyckas
