[asp.net]Image upload in aparte class, alleen geen upload?

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Hoi,

Ik ben bezig om een image uploader en vervolgens een editor te maken.
Ik had alles goed werken, men upload een image, vervolgens werd er van alles mee gedaan en kwam het goed.

De werkende versie is: upload.aspx(.vb). Deze page bevat dus alles. Maar dat wil ik dus niet.

Ik wil het e.e.a. gaan scheiden. Het uploaden in een aparte class, het editten in een aparte class, zodat de verschillende classes op verschillende plaatsen in de webapplicatie (niet webpage) aangeroepen kunnen worden met parameters. Het lijkt me logisch dat ik dezelfde code gebruik uit de werkende versie.

Upload.class
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class ImageUploader

    ' guid creëren
    Public Function GuidGen() As String
        Dim oGuid As System.Guid
        oGuid = System.Guid.NewGuid()
        GuidGen = UCase(oGuid.ToString)
    End Function

    ' uploaden van de image
    Sub UploadImage(inputinstance as Web.HttpPostedFile)
        If Not (inputinstance Is Nothing) Then
            Dim strLongFilePath As String = inputinstance.FileName
            Dim strFileName As String
            Dim ServerPath As String
            strFileName = GuidGen() & ".jpg"
            ServerPath = ("c:\inetpub\wwwroot\images\")
            Try
                inputinstance.SaveAs(ServerPath & strFileName)
            Catch Ex As Exception
            End Try
        End If
    End Sub
End Class

Bovenstaande code is gebaseerd op mijn werkende sub uit de upload.aspx(.vb)

En de sub uit een "random" aspx file.
UploadImage.aspx.vb
Visual Basic .NET:
1
2
3
4
5
6
    Private Sub submit_click
         (ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim uploadinstance As ImageUploader.ImageUploader
        Dim veldnaam As Web.HttpPostedFile
        uploadinstance.UploadImage(veldnaam)
    End Sub


Feitelijk is er niks schokkends aan de code gewijzigd. Dit werkt dus gewoonweg niet.

Een upload vindt niet plaats. Kan iemand mij op weg helpen?

Ik krijg geen foutmeldingen. Als ik de "werkende" versie strip en naar deze code terugbreng werkt het wel gewoon. Snap er niks van.

dit is mijn eerste poging tot het werken met aparte class files, dus misschien dat dat het probleem is?

[ Voor 8% gewijzigd door TeeDee op 10-03-2004 10:39 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Lijkt me logisch, omdat je het click-event van de button moet gaan koppelen aan submit_click

Vervolgens zal je een error krijgen, omdat veldnaam niet is gekoppeld aan een ander element en dus nothing zal zijn;
Visual Basic .NET:
1
Dim veldnaam As Web.HttpPostedFile = CType(ME.findcontrol("veldnaam",Web.HttpPostedFile)

zal dan beter gaan werken.

[ Voor 62% gewijzigd door gorgi_19 op 10-03-2004 10:41 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
gorgi_19 schreef op 10 maart 2004 @ 10:39:
Lijkt me logisch, omdat je het click-event van de button moet gaan koppelen aan submit_click

Vervolgens zal je een error krijgen, omdat veldnaam niet is gekoppeld aan een ander element en dus nothing zal zijn;
Visual Basic .NET:
1
...

zal dan beter gaan werken.
Hmm, het ziet er logisch uit wat je post, maar echt werken doet ie nog niet. BEn nog even aan het stoeien :'(

edit: Nog even wat aangepast.
Visual Basic .NET:
1
2
3
4
5
6
7
    Private Sub btnupload_click
   (ByVal sender As System.Object, ByVal e As System.EventArgs)
   Handles btnUpload.Click
        Dim uploadinstance As ImageUploader.ImageUploader
        Dim veldnaam As Web.HttpPostedFile = CType(ME.findcontrol("fileupload1", Web.HttpPostedFile)
        uploadinstance.UploadImage(veldnaam)
    End Sub

veldnaam geeft dus de fout dat hij niet "declared" is. Aan de slag maar TeeDee

[ Voor 44% gewijzigd door TeeDee op 10-03-2004 10:48 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Die eerste gaat trouwens ook gruwelijk mis.. :X
Visual Basic .NET:
1
Dim uploadinstance As ImageUploader.ImageUploader = new ImageUploader.ImageUploader

[ Voor 8% gewijzigd door gorgi_19 op 10-03-2004 10:50 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Oké, ik heb jouw tips e.d. overgenomen:

aspx
Visual Basic .NET:
1
2
3
4
<form id="Form1" method="post" runat="server">
<INPUT id="fileupload1" type="file" size="20" runat="server" NAME="fileupload1">
<asp:button id="btnUpload" runat="server" Text="upload"></asp:button>
</form>


Code behind
Visual Basic .NET:
1
2
3
4
5
6
7
8
Private Sub btnUpload_click
(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim uploadinstance As ImageUploader.ImageUploader = 
         New ImageUploader.ImageUploader()
Dim veldnaam As Web.HttpPostedFile  = 
      CType(ME.findcontrol("fileupload1", Web.HttpPostedFile))
uploadinstance.UploadImage(veldnaam)
End Sub


Daar lijkt het bij het CType gedeelte fout te gaan. Hij geeft dan namelijk aan dat veldnaam niet gedeclared is. Als ik het hele CType gedeelte weghaal, dan geeft ie geen fout, maar dan wordt er niets geupload.

En de upload.class
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
    Sub UploadImage(inputinstance as Web.HttpPostedFile)
        If Not (inputinstance Is Nothing) Then
            Dim strLongFilePath As String = inputinstance.FileName
            Dim strFileName As String
            Dim ServerPath As String
            strFileName = GuidGen() & ".jpg"
            ServerPath = ("c:\inetpub\wwwroot\images\")
            Try
                inputinstance.SaveAs(ServerPath & strFileName)
            Catch Ex As Exception
            End Try
        End If
    End Sub

Ik snap er werkelijk waar niks meer van. Misschien beter om een eens een tut over het gebruik van aparte classes te gaan volgen :'(

[ Voor 8% gewijzigd door TeeDee op 10-03-2004 11:07 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 loopt even te prutsen zeg.. . |:(
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
       Private Sub HandleUpload(ByVal sender As Object, ByVal e As EventArgs)

            Dim filUpload As HtmlInputFile = CType(Me.FindControl("UploadFile"), HtmlInputFile)

            If filUpload.PostedFile Is Nothing Then Exit Sub
            ' Get a reference to the uploaded file
            Dim filPosted As System.Web.HttpPostedFile = filUpload.PostedFile
            Dim intFileLength As Integer = System.Convert.ToInt32(filPosted.ContentLength)

            filUpload.PostedFile.SaveAs(filename)

          End Sub


Liep ik even 2 classes (HtmlInputFile en HttpPostedFile) door elkaar te halen.. :X

ergo:

Visual Basic .NET:
1
2
Dim filUpload As Web.HtmlInputFile = CType(Me.FindControl("fileupload1"), Web.HtmlInputFile)
Dim veldnaam As Web.HttpPostedFile  = filUpload.PostedFile


trouwens, voor leesbaarheid:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
    Sub UploadImage(inputinstance as Web.HttpPostedFile)
        If Not (inputinstance Is Nothing) Then
            Dim strLongFilePath As String = inputinstance.FileName
            Dim ServerPath As String = "c:\inetpub\wwwroot\images\{0}.jpg"

            Try
                inputinstance.SaveAs(String.Format(ServerPath, GuidGen))
            Catch Ex As Exception
            End Try
        End If
    End Sub

En waarom vang je geen exception af?
Verder: is GuidGen een geldige method?

[ Voor 180% gewijzigd door gorgi_19 op 10-03-2004 11:15 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
gorgi_19 schreef op 10 maart 2004 @ 11:08:
* gorgi_19 loopt even te prutsen zeg.. . |:(
Visual Basic .NET:
1

Liep ik even 2 classes (HtmlInputFile en HttpPostedFile) door elkaar te halen.. :X
ergo:
Visual Basic .NET:
1
Okay, het begint me een klein beetje te dagen.

Het 2e stukje code zet ik in de codebehind? Want hij geeft aan dat Web.HtmlInputfile niet defined is. (Namespace heb ik geimporteerd)

Het 1e stukje is een vervanging voor mijn eigen class?

GuidGen is een werkende functie. Tenminste in mijn eerste opzet werkt ie wel. Expection afvanging wil ik even als latere zorg houden. Eerst maar eens wat geupload zien te krijgen.

[ Voor 16% gewijzigd door TeeDee op 10-03-2004 11:19 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

TeeDee schreef op 10 maart 2004 @ 11:18:
[...]


Okay, het begint me een klein beetje te dagen.

Het 2e stukje code zet ik in de codebehind? Want hij geeft aan dat Web.HtmlInputfile niet defined is. (Namespace heb ik geimporteerd)

Het 1e stukje is een vervanging voor mijn eigen class?
Nee, 't is in de system.Web.UI.HtmlControls namespace

* gorgi_19 gaat voor vandaag maar stoppen met GoT; te veel fouten in 1 thread gemaakt.. :X

Trouwens, als je exception afvanging later doet, sloop dan die try-catch er uit. Zie je ook gelijk WAAROM het niet werkt.

[ Voor 16% gewijzigd door gorgi_19 op 10-03-2004 11:22 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
gorgi_19 schreef op 10 maart 2004 @ 11:20:
[...]
Nee, 't is in de system.Web.UI.HtmlControls namespace
* gorgi_19 gaat voor vandaag maar stoppen met GoT; te veel fouten in 1 thread gemaakt.. :X
Trouwens, als je exception afvanging later doet, sloop dan die try-catch er uit. Zie je ook gelijk WAAROM het niet werkt.
Web.UI.Htmlcontrols was ik ook achtergekomen.
Heb nu even het try/catch eruit gehaald, maar er volgt geen error. Het lijkt net of er (asp stijl) geen action aan het form hangt.

Ik ga gewoon nog even rommelen. Ik hoop dat ik nu op de goede weg zit in ieder geval.

Edit:
Het mag toch niet uitmaken dat de class uit een ander project komt. Deze heb ik wel toegevoegd in mijn webproject en als reference opgegeven?

Edit:
Heb nog het e.e.a. nagevraagd en dat zou moeten werken. Misschien om te beginnen is het makkelijker om in het zelfde project een class toe te voegen...?

[ Voor 21% gewijzigd door TeeDee op 10-03-2004 11:35 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Toch ook maar even de Enctype aan het form toegevoegd maar dat mocht niet baten. :(

Ik denk dat ik maar even helemaal terug ga naar het begin en vanaf daar opnieuw aan de slag.

gorgi_19, in ieder geval bedankt voor de hulp, en ik ga gewoon even van jouw stukjes code uit.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Het begint nu wel erg vreemd te worden.
Ik had even wat getest door een label op de submit page te zetten, en dan onsubmit deze te vullen met een string. Zelfs dat werkte niet.

Dit kan ik niet uitstaan, dus even een nieuw project begonnen, een label op de layout gezet, button erbij, onclick een tekst string erin, en ziedaar, die werkt wel.

Wat is dit irritant zeg.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Ah, ik heb het eindelijk werkend.

Nu nog een ander probleem:
In de webform1.aspx.vb kan je zonder problemen een session aanmaken.
Dat gaat dus niet in de uploader.vb. Daar nog even naar zoeken, alhoewel al het materiaal wat ik vind over het algemeen in .aspx.vb files zit. Thanks gorgi_19 O+

webform1.aspx

Visual Basic .NET:
1
2
3
4
<form id="Form1" method="post" encType="multipart/form-data" runat="server">
  <INPUT id="fileupload1" type="file" size="20" name="bla" runat="server">
  <asp:button id="btnUpload" runat="server" Text="upload"></asp:button>
</form>


Webform1.aspx.vb

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Sub btnUpload_Click
(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Handles btnUpload.Click
Dim fileupload1 As Web.UI.HtmlControls.HtmlInputFile = 
CType(Me.FindControl("fileupload1"), Web.UI.HtmlControls.HtmlInputFile)
Dim veldnaam As Web.HttpPostedFile = fileupload1.PostedFile
Dim uploadfile As New uploader()
uploadfile.UploadImage(veldnaam)
End Sub


Uploader.vb

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Public Class uploader
    Sub UploadImage(ByVal inputinstance As Web.HttpPostedFile)
        If Not (inputinstance Is Nothing) Then
            Dim strLongFilePath As String = inputinstance.FileName
            Dim bestandsnaam As String
            Dim Guid As New CommonGuid()
            bestandsnaam = Guid.GuidGen() & ".jpg".ToString()
            Dim ServerPad As String = "c:\inetpub\wwwroot\images\"
            inputinstance.SaveAs(String.Format(ServerPad & bestandsnaam))
        End If
    End Sub
End Class


Guid.GuidGen komt uit een andere class. Ik dacht, ben nu toch lekker bezig, flikkeren we gewoon even die functie ook in een class.

Webform1.aspx.vb is een klein beetje aangepast (enters ingegeven) ivm layout verneuking.

offtopic:
iemand die info heeft over sessions en aparte class files?

[ Voor 12% gewijzigd door TeeDee op 10-03-2004 15:26 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

<TeeDee> maar die returnwaarde krijg ik niet uitgelezen < lees, omdat ik niet weet hoe dat moet en waar ik deze aan moet spreken
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
Public Class uploader
    Public Function UploadImage(ByVal inputinstance As Web.HttpPostedFile) as string
        If Not (inputinstance Is Nothing) Then
            Dim strLongFilePath As String = inputinstance.FileName
            Dim ServerPad As String = "c:\inetpub\wwwroot\images\" & New CommonGuid().GuidGen() & ".jpg".ToString()
            inputinstance.SaveAs(ServerPad)
            return ServerPad
        End If
    End Sub
End Class

ff je code iets omgebouwd...
String.Format is nutteloos in je code, doet niets, dus mag weg. Wat doe je met strLongFilePath; niets? Mag die ook weg. Ruimt tenminste lekker op.

Je zocht een returnwaarde, dus maak je van de sub een function.


Moeten we alleen de returnwaarde afvangen..
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Sub btnUpload_Click
(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Handles btnUpload.Click
Dim fileupload1 As Web.UI.HtmlControls.HtmlInputFile = 
CType(Me.FindControl("fileupload1"), Web.UI.HtmlControls.HtmlInputFile)
Dim veldnaam As Web.HttpPostedFile = fileupload1.PostedFile
Dim uploadfile As New uploader()
Dim uploadedFileName as string = uploadfile.UploadImage(veldnaam)
End Sub

De waarde zit nu in uploadedFileName; geen idee wat je er mee wilt ,maar je kan hem in een label oid stoppen.

[ Voor 76% gewijzigd door gorgi_19 op 10-03-2004 18:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:01
Zoals gezegd, gorgi_19 is mijn held. :)

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1