Avatar billede kischi Novice
28. december 2008 - 00:17 Der er 36 kommentarer og
1 løsning

file upload

Hej jeg prøver at gøre så man kan uploade en excel fil fra min hjemmeside.

Når jeg har skrevet koden og prøver at uploade den får jeg en fejl som siger: Compilation Error

Det kan ses på: http://radio.web.surftown.dk/admin/indset_program.aspx

min kode ser sådan ud:

protected void Button2_Click(object sender, EventArgs e)
    {
        string sSavePath;

        sSavePath = "../";

        if (FileUpload.PostedFile != null)
        {
            // Check file size (mustn’t be 0)
            HttpPostedFile myFile = FileUpload.PostedFile;
            int nFileLen = myFile.ContentLength;
            if (nFileLen == 0)
            {
                lblOutput_excel.Text = "No file was uploaded.";
                return;
            }
            if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".xls")
            {
                lblOutput.Text = "The file must have an extension of xls";
                return;

            }

            byte[] myData = new Byte[nFileLen];
            myFile.InputStream.Read(myData, 0, nFileLen);
        }

                    System.IO.FileStream newFile
                    = new System.IO.FileStream(Server.MapPath(sSavePath),
                                              System.IO.FileMode.Create);
            newFile.Write(myData, 0, myData.Length);
            newFile.Close();
    }


Når jeg køre musen hen over "myData" står der: "the name 'myData' does not exist in the current context"

Er der nogle som kan hjælpe mig med problemet?

Hvis i har en bedre idé til hvordan jeg uploader en fil så er jeg åben for det?

mvh. kischi
Avatar billede erikjacobsen Ekspert
28. december 2008 - 00:22 #1
Du skal erklære myData før din if - og så putte data i den sidst i din if
Avatar billede erikjacobsen Ekspert
28. december 2008 - 00:23 #2
Eller flytte skrivning af filen ind i din if - det giver vel ikke mening ellers.
Avatar billede kischi Novice
28. december 2008 - 00:47 #3
Ok, hvordan er det jeg erklære myData?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 00:48 #4
Læs nu kommentar nummer 2.

Men du erklærer og putter data i din variabel myData i linien:

  byte[] myData = new Byte[nFileLen];
Avatar billede erikjacobsen Ekspert
28. december 2008 - 00:49 #5
Og undskyld, men, altså, hvorfor i alverden bøvler du med "file upload", når du ikke ved hvordan man erklærer en variaable i C#? Ville det ikke være mere formålstjenligt at lære sproget først?
Avatar billede kischi Novice
28. december 2008 - 01:32 #6
Undskyld, men jo. Jeg kan sproget nogenlunde, og jeg vil hele tiden lære mere selvfølgelig. Så jeg lærer sproget imens jeg laver hjemmesider.

Jeg tænkte også at man erklærede på den måde, men var ikke sikker på at det hed at erklære. Men det var jo også gjordt.

Men det var rigtigt, nu satte jeg resten op i if sætningen. Og så er jeg kommet videre fra fejlen. Men nu virker det bare ikke. Jeg har prøvet at uploade en fil som hedder: test.xls Men den lægger sig ikke på serveren.

ved du hvad problemmet kunne være?

Nu ser min kode sådan ud:

protected void Button2_Click(object sender, EventArgs e)
    {
        string sSavePath;

        sSavePath = "../admin";

        if (FileUpload.PostedFile != null)
        {
            // Check file size (mustn’t be 0)
            HttpPostedFile myFile = FileUpload.PostedFile;
            int nFileLen = myFile.ContentLength;
            if (nFileLen == 0)
            {
                lblOutput_excel.Text = "No file was uploaded.";
                return;
            }
           

            if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".xls")
            {
                lblOutput.Text = "The file must have an extension of xls";
                return;

            }
         
            byte[] myData = new Byte[nFileLen];
            myFile.InputStream.Read(myData, 0, nFileLen);

            System.IO.FileStream newFile
                        = new System.IO.FileStream(Server.MapPath(sSavePath),
                                                  System.IO.FileMode.Create);
            newFile.Write(myData, 0, myData.Length);
            newFile.Close();
       
        }
Avatar billede erikjacobsen Ekspert
28. december 2008 - 10:22 #7
Det gør den nok ikke. Hvilket filnavn ville den skulle have?  Er "admin" et katalog?  Hvad kommer der ud af Server.MapPath(sSavePath) ? Hvor bruger du myFile.FileName?
Avatar billede kischi Novice
28. december 2008 - 10:58 #8
Hvad mener du med hvilket filnavn den skulle have. Det burde da være ligemeget hvad filnavnet er, bare den ender med .xls . admin er en mappe på roden.

Jeg forstår ikke helt hvad du mener med hvad der kommer ud af Server.MapPath(sSavePath)?

Og her bruger jeg (myFile.FileName):
if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".xls")

Det betyder jo bare at hvis ændelsen ikke er .xls så skal den eksekvere dette.

Håber det var svar nok.

mvh. Adam
Avatar billede erikjacobsen Ekspert
28. december 2008 - 12:01 #9
Så lad mig prøve at lede dig på sporet på anden vis: Bruger du filnavnet på det sted du vil skrive filen på serveren.
Avatar billede kischi Novice
28. december 2008 - 12:30 #10
Nej jeg bruger ikke filnavnet noget andet sted, det er bare meningen at man skal kunne uploade hvilken som helst xls fil til serveren.

Det jeg skal bruge den til er at excel filens data skal indlæses til sql serveren, men det virker fint.
Men for at det kan virker skal filen ligge på serveren.

Jeg håber jeg har forstået dit spørgsmål rigtigt?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 12:59 #11
Når du bruger "new System.IO.FileStream(...)" skal du angive det filnavn, som indholdet skal gemmes i. Gør du det?
Avatar billede kischi Novice
28. december 2008 - 13:16 #12
Nej det gør jeg vel ikke så.
men hvilket indhold er det du mener?
Der er jo ikke noget filnavn som indhold skal gemmes i.
Der er bare en mappe som filen som man uploader skal gemmes i.

Er det denne kodestump du mener at jeg skal ændre?

System.IO.FileStream newFile
                    = new System.IO.FileStream(Server.MapPath(sSavePath),
                                              System.IO.FileMode.Create);
            newFile.Write(myData, 0, myData.Length);
            newFile.Close();
Avatar billede erikjacobsen Ekspert
28. december 2008 - 13:19 #13
Ja. Du skal jo angive et filnavn, når du bruger FileStream.
Avatar billede kischi Novice
28. december 2008 - 13:32 #14
Nå ok, nu er jeg ikke så kendt med FileStream.

Hvor skal jeg så angive filnavnet i denne kod:

new System.IO.FileStream(Server.MapPath(sSavePath)

Og vil det så sige at det ikke er muligt at uploade hvilken som helst fil man vil?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 13:48 #15
Du kan uploade hvad du vil (store filer måske ikke). Men filen skal have et navn på serveren. Første argument til "new FileStream" er filnavnet. Du angiver (formentlig) ikke et filnavn.
Avatar billede kischi Novice
28. december 2008 - 14:11 #16
Nå ok, så hvis jeg har forstået det rigtigt.
Så det der sker med "new FileStream" er at når man uploader en fil så bliver den automatisk omdøbt til det filnavn man angiver.

Er det rigtigt forstået?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:22 #17
Muligvis korrekt - hvad mener du?
Avatar billede kischi Novice
28. december 2008 - 14:29 #18
Hvis jeg for eksempel uploader en fil ved navn test.xls
Men der i koden står new FileStream(database.xls)

Kommer filnavnet på serveren så til at hedder database.xls istedet for test.xls?

Forstod du det spørgsmål?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:32 #19
Filen, der oprettes af FileStream-klasse, kommer til at hedde det du skriver som første argument til "new FileStream".
Avatar billede kischi Novice
28. december 2008 - 14:45 #20
Jeg er ikke sikker, men jeg tror måske vi misfårstår hinanden.
Der skal ikke oprettes nogen fil.

Filen som skal lægges på serveren skal jo bare kopieres fra computeren til serveren.
Så filen eksistere allerede på computeren.
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:48 #21
"Der skal ikke oprettes nogen fil." siger du i dit sidste indlæg. Tidligere skriver du "Jeg har prøvet at uploade en fil som hedder: test.xls Men den lægger sig ikke på serveren."

Jeg forstår vist ikke hvad du vil.
Avatar billede kischi Novice
28. december 2008 - 15:11 #22
ok, jeg vil ligge en fil som jeg har på min computer ned i en mappe på mit webhotel.
Den skal ikke oprette en ny fil, det er jo en fil som allerede eksistere på min computer som jeg bare vil have op på mit webhotel ved hjælp af file upload

Var det bedre forklaret?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 16:02 #23
Ja og nej ;)  Den kan kun komme til at ligge på webhotellet som en ny fil. Alternativet, som ikke opretter en ny fil, er at "bruge" indholdet af den uploadede fil til et eller andet (tælle tal sammen, eller hvad det kan være), og ikke gemme indholdet.
Avatar billede kischi Novice
28. december 2008 - 16:19 #24
Nå ok, så har jeg nok misforstået, hvordan man bruger fileupload.
Så skal jeg vel oprette en fil.
Men det er jo ligesom hvis man skal uploade et billede til webhotellet, så opretter man da ikke en ny vel? kopiere den ikke bare billedet fra din computer til webhotellet?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 16:26 #25
Det er nok en strid om ord. Den opretter en ny fil på webhotellet, med det samme indhold.
Avatar billede kischi Novice
28. december 2008 - 16:37 #26
Nå ok, så forstår jeg :-D

Nu tilbage til det oprindelige så.

hvad var det så ved det her jeg skulle ændre og til hvad?

new System.IO.FileStream(Server.MapPath(sSavePath)
Avatar billede erikjacobsen Ekspert
28. december 2008 - 16:47 #27
Hvilket navn skal filen have på serveren?
Avatar billede kischi Novice
28. december 2008 - 17:21 #28
database.xls
Avatar billede erikjacobsen Ekspert
28. december 2008 - 17:23 #29
Du kan så fx rette

  sSavePath = "../admin";

til

  sSavePath = "../admin/database.xls";

forudsat dit katalog "admin" ligger der allerede.
Avatar billede kischi Novice
28. december 2008 - 17:27 #30
når du siger katalog, mener du så mappe?
Avatar billede erikjacobsen Ekspert
28. december 2008 - 17:49 #31
Ja. Kært barn har mange navne.
Avatar billede kischi Novice
29. december 2008 - 06:58 #32
Nu har jeg prøvet at gøre det men det virker stadig ikke, nu ser hele koden sådan ud:

{
        string sSavePath;

        sSavePath = "../admin/test.xls";

        if (FileUpload.PostedFile != null)
        {
            // Check file size (mustn’t be 0)
            HttpPostedFile myFile = FileUpload.PostedFile;
            int nFileLen = myFile.ContentLength;
            if (nFileLen == 0)
            {
                lblOutput_excel.Text = "No file was uploaded.";
                return;
            }
           

            if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".xls")
            {
                lblOutput.Text = "The file must have an extension of xls";
                return;

            }
         
            byte[] myData = new Byte[nFileLen];
            myFile.InputStream.Read(myData, 0, nFileLen);

            System.IO.FileStream newFile
                        = new System.IO.FileStream(Server.MapPath(sSavePath),
                                                  System.IO.FileMode.Create);
            newFile.Write(myData, 0, myData.Length);
            newFile.Close();
       
        }
Avatar billede erikjacobsen Ekspert
29. december 2008 - 09:19 #33
Oplysningen "men det virker stadig ikke," er for upræcis til at vi kan bruge det til noget.
Avatar billede kischi Novice
30. december 2008 - 20:36 #34
Nå ok undskyld. Det jeg mener er at når jeg prøver at uploade en fil, siger den stadig: No file was uploaded.

Og uploader den ikke til serveren.

Ligesom før.
Avatar billede erikjacobsen Ekspert
30. december 2008 - 21:00 #35
Ok - det var da rart at vide. :)

Der er som sådan ikke noget galt med din kode - jeg kører den (ligner meget) et sted uden problemer. Men der kan så være noget galt i det du ikke viser.
Avatar billede kischi Novice
31. december 2008 - 09:30 #36
Ja nu har jeg faktisk lige fået den til at virke.
En dum fejl, jeg har lavet. Jeg kaldte FileUpload istedet for File1.

Dum lille fejl.

Men tak for alt din hjælp. Det hjalp meget.
Avatar billede kischi Novice
25. januar 2011 - 17:00 #37
så lukker jeg lige
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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