16. september 2002 - 10:27Der er
14 kommentarer og 1 løsning
Uploading af filer
Jeg er igang med at lave en webside, hvor brugerne fra en webform skal kunne uploade et billede (.jpg). Når brugeren har valgt et billede (f.eks. c:\dokumenter\billeder\pic1.jpg), skal det uploades til webserveren (f.eks. (root)/picturepage/pics/pic1.jpg), og kun billednavnet - og ikke stien - skal gemmes i en database. Hvordan gør jeg det ?
Foreløbig er jeg kun kommet til <input type="file"...>
Prøv at lege lidt med det her eksempel (jeg tror jeg har posted det før, men kunne ikke lige finde det). Så er det jo bare lige at tilføje filnavnet til databasen.
<script language="VB" runat=server> Sub myUploadCode(Sender as Object, E as EventArgs) Dim strFileName AS String
'---- her finder vi filens navn ved at lede baglæns efter den første forekomst af \ (backslash) ---- If InStr(upload_file.PostedFile.FileName, "\") > 0 Then strFileName = Mid(upload_file.PostedFile.FileName, InStrRev(upload_file.PostedFile.FileName, "\") + 1) Else strFileName = "ukendt.fil" End If
'---- gem filen i den nuværende mappe på webserveren med filnavnet som er gemt i strengen strFileName ---- upload_file.PostedFile.SaveAs(Server.MapPath(strFileName))
'---- skriv besked i vores status label, og gør den synlig ---- statustext.text = "<p>Filen <b>"& strFileName &"</b> er nu uploaded til serveren!" statustext.text = statustext.text & "<br><br><a href="""& strFileName &""" target=""_blank"">Klik her for at downloade filen "& strFileName &"</a> (åbner i nyt vindue)" statustext.text = statustext.text & "<br><br><a href=""upload.aspx"">Klik her for at uploade en ny fil</a></p>"
statustext.visible = true
'---- skjul formen ---- uploadform.visible = false End Sub </script>
<html><head> <title>Upload filer med ASP.NET</title> </head><body>
<h2>Upload med ASP.NET</h2>
<form enctype="multipart/form-data" runat="server" id="uploadform" visible="true"> <p>Vælg den fil som skal uploades til serveren:</p>
Herudover burde måske sætte nogle betingelser ind. F.eks. hvilke filtyper er tilladte, og hvor store filerne må være: F.eks.: 'Tjek for filtype: If InStr(strFileName, ".") > 0 Then strExtension = Mid(strFileName, InStrRev(strFileName, ".") + 1) Else strExtension = "" End If Select Case strExtension Case "gif","jpg","jpeg","png": 'Gør et eller andet Case Else: StatusText.Text = "Fejl! Filen er ikke et billede<br/>" StatusText.Visible=True Exit Sub End Select
'Tjek for filstørrelse if upload_file.PostedFile.ContentLength>(1024*100) Then StatusText.Text = "Fejl! Filen er størrere end 100kb.<br/>" StatusText.Visible=True Exit Sub End if
Odegaard --> Tak, det virker fint. Jeg har dog lige et spørgsmål mere: hvordan sætter jeg den til at gemme billedet i en anden folder end den, som aspx-dokumentet ligger i ? Det må have et eller andet med Server.MapPath at gøre...
Men jeg kender ikke mappestrukturen på serveren. Jeg har kun mit root-dir, hvorfra jeg kan lave undermapper. Så kan jeg ikke skrive et eller andet med upload_file.PostedFile.SaveAs("<root>/picfolder/" & strFileName) ?
Det tjek på filstørrelse kan jeg ikke få til at virke. Hvis jeg vælger en for stor fil, siger den bare, at siden ikke kan vises
hmm... siger den siden ikke kan vises ??? Kan du debugge siderne derfra hvor du sidder? (det kan man ihvertfald hvis man sidder på localhost) Der kunne jo være en skrivefejl...
Din sti til root kan findes således: server.mappath("/") Dvs. du skal f.eks. gemme i server.mappath("/") & "files\" & strFileName
Prøv at lave en fil der hedder "web.config", smid den i www-root og skriv følgende i den: <configuration> <system.web> <compilation debug="true"/> </system.web> </configuration>
Så skulle du være istand til at se kode-fejl og lignende, selvom du ikke er på localhost. Jeg takker for pointene.
jeg er klar over at det ikke er helt relevant, men når jeg prøver at søge i en streng efter "\" får jeg "new line in constant" som kompileringsfejl. Bruger C# - har I nogen ideer?
Ja - du skriver @"\" i stedet for - så opfattes den ikke længere som new line in constant
Synes godt om
Ny brugerNybegynder
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.