Avatar billede kischi Novice
12. april 2009 - 10:15 Der er 11 kommentarer og
1 løsning

File Upload

Hej, jeg er igang med at lave en fileupload funktion.

og den virker også fint nok, men den jeg har lavet er man tvunget til at uploade et billede og det skal være en jpg fil.
Jeg vil have at man selv må bestemme om man vil uploade et billede?

håber nogle kan hjælpe mig, og i fårstår hvad jeg mener?

Min kode ser sådan ud:

[code]

// Initialize variables

        string sSavePath;
        string sThumbExtension;


        // Set constant values

        sSavePath = "images/";
        sThumbExtension = "_thumb";


        if (fu.PostedFile != null)
        {
            // Check file size (mustn't be 0)

            HttpPostedFile myFile = fu.PostedFile;
            int nFileLen = myFile.ContentLength;
            if (nFileLen == 0)
            {
                lblOutput.Text = "Du skal uploade en fil.";
                return;
            }

            if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".jpg")
            {
                lblOutput.Text = "det skal være en jpg fil";
                return;
            }

            // Read file into a data stream

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

            // Make sure a duplicate file doesn't exist.  If it does, keep on appending an

            // incremental numeric until it is unique

            string sFilename = System.IO.Path.GetFileName(myFile.FileName);
            int file_append = 0;
            while (System.IO.File.Exists(Server.MapPath(sSavePath + sFilename)))
            {
                file_append++;
                sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
                                + file_append.ToString() + ".jpg";
            }

            // Save the stream to disk

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

            // If jpg file is a jpeg, create a thumbnail filename that is unique.

            file_append = 0;
            string sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
                                                    + sThumbExtension + ".jpg";
            while (System.IO.File.Exists(Server.MapPath(sSavePath + sThumbFile)))
            {
                file_append++;
                sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +
                              file_append.ToString() + sThumbExtension + ".jpg";

[/code]


Mvh. Adam
Avatar billede keysersoze Guru
12. april 2009 - 10:40 #1
Fjern dine to if-sætninger inde i din første if - dvs væk med

if (nFileLen == 0)
{
    lblOutput.Text = "Du skal uploade en fil.";
    return;
}

if (System.IO.Path.GetExtension(myFile.FileName).ToLower() != ".jpg")
{
    lblOutput.Text = "det skal være en jpg fil";
    return;
}
Avatar billede kischi Novice
12. april 2009 - 11:20 #2
Ok, nu virker det lidt. Men lige når man klikke på knappen kommer der en fejl meddelelse:

Could not find a part of the path 'D:\hshome\kischi2\radio.web.surftown.dk\admin\images\'.

Men det virker alligevel, fordi når jeg ser om den lægger det i min db og udskriver det på en ny side så virker det.

Du kan prøve på:

http://radio.web.surftown.dk/admin/slet_teknikkere.aspx

Og så klikke skriv beskrivelse på navn 1 under teknikere.
Og så kun skrive noget tekst i feltet uden at uploade et billede.
så kan du se fejlen.

Så bagefter gå ind på:

http://radio.web.surftown.dk/viewpage_tekniker.aspx?task=edit&id=23

Og se at den har skrevet din tekst på den side.

Håber du forstår hvad jeg mener?
Avatar billede keysersoze Guru
12. april 2009 - 11:40 #3
jeg tror det letteste vil være hvis du debugger dig igennem din kode og ser præcis hvor den fejler - på den måde kan du måske endda også se hvorfor.
Avatar billede kischi Novice
13. april 2009 - 11:35 #4
Hej Igen,

Nu har jeg prøvet at debugge min kode, men jeg er ikke så god til det, og ved ikke hvad det betyder med den fejl den kommer med.

men den køre helt til efter jeg har indtastet noget i beskrivelses feltet og så kommer den tilbage til koden og stopper ved:

objcmd.ExecuteNonQuery();

Hvor der også kommer en lille box op som står:

Parameterized Query '(@beskrivelse nvarchar(4),@img_url nvarchar(4000),@id nvarchar(4' expects parameter @id, which was not supplied.

Jeg håber du ved hvad jeg mener og at du kan hjælpe mig?

Tak
Avatar billede keysersoze Guru
13. april 2009 - 19:44 #5
jeg kan slet ikke se den del i din kode - så det bliver umiddelbart lidt svært. Men du må kunne se om du i det hele taget har sat den parameter op - og hvis, om værdien så indeholder noget eller ej. Mest sandsynligt er selvfølgelig, som fejlen også siger, at du ikke sat parametren op.
Avatar billede kischi Novice
13. april 2009 - 20:10 #6
Ja undskyld, jeg havde kun pastet det som file upload består af.
Men her er hele koden, så du også kan se at jeg har sat de parametre op. Og fejlen kom jo ikke før jeg slettede de to if sætninger, så tror du ikke det måske har noget med det at gøre?

Men her er alt min kode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web.Security;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data.OleDb;

public partial class admin_skriv_beskrivelse_tekniker : System.Web.UI.Page
{
    SqlConnection objconn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ToString());

    protected void Page_Load(object sender, EventArgs e)
    {


    }

    protected void opret_Click(object sender, EventArgs e)
    {

        SqlCommand objcmd = new SqlCommand();
        objcmd.CommandType = CommandType.Text;
        objcmd.Connection = objconn;
        objcmd.CommandText = "UPDATE TEKNIKKERE SET beskrivelse = @beskrivelse, img_url = @img_url WHERE id = @id";
        objcmd.Parameters.AddWithValue("@beskrivelse", (titel.Value.Replace(Environment.NewLine, "<br />")));
        objcmd.Parameters.AddWithValue("@img_url", fu.FileName);
        objcmd.Parameters.AddWithValue("id", Request.QueryString["id"]);



        objconn.Open();

        objcmd.ExecuteNonQuery();

        objconn.Close();


        // Initialize variables

        string sSavePath;
        string sThumbExtension;


        // Set constant values

        sSavePath = "images/";
        sThumbExtension = "_thumb";


        if (fu.PostedFile != null)
        {
            // Check file size (mustn't be 0)

            HttpPostedFile myFile = fu.PostedFile;
            int nFileLen = myFile.ContentLength;
           

            // Read file into a data stream

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

            // Make sure a duplicate file doesn't exist.  If it does, keep on appending an

            // incremental numeric until it is unique

            string sFilename = System.IO.Path.GetFileName(myFile.FileName);
            int file_append = 0;
            while (System.IO.File.Exists(Server.MapPath(sSavePath + sFilename)))
            {
                file_append++;
                sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
                                + file_append.ToString() + ".jpg";
            }

            // Save the stream to disk

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

            // If jpg file is a jpeg, create a thumbnail filename that is unique.

            file_append = 0;
            string sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
                                                    + sThumbExtension + ".jpg";
            while (System.IO.File.Exists(Server.MapPath(sSavePath + sThumbFile)))
            {
                file_append++;
                sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +
                              file_append.ToString() + sThumbExtension + ".jpg";


            }
        }

    }
}


Ved du nu hvad fejlen kunne betyde? Fordi jeg tror da at jeg sætter parametrene op rigtigt.

Tak
Avatar billede keysersoze Guru
13. april 2009 - 21:35 #7
objcmd.Parameters.AddWithValue("@id", Request.QueryString["id"]);
Avatar billede kischi Novice
13. april 2009 - 22:20 #8
Ok nu prøvede jeg at ændre den linje, men den kommer stadig med en fejl når jeg prøver at skrive noget tekst og klikker på knappen.

Fejlen siger:

-------------------------------------------------------

Could not find a part of the path 'D:\hshome\kischi2\radio.web.surftown.dk\admin\images\'.


Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'D:\hshome\kischi2\radio.web.surftown.dk\admin\images\'.

Source Error:

Line 85:            // Save the stream to disk
Line 86:
Line 87:            System.IO.FileStream newFile
Line 88:                    = new System.IO.FileStream(Server.MapPath(sSavePath + sFilename),
Line 89:                                                System.IO.FileMode.Create);
---------------------------------------------------------------

Kan det ikke have noget med at gøre at den leder efter den sti, og kan ikke finde den. Altså jeg ved at den eksistere, og det virkede jo også før. Men kan det have noget at gøre med FileStream?

Håber du kan hjælpe

Tak
Avatar billede keysersoze Guru
14. april 2009 - 18:36 #9
Igen vil debug-info nok kunne hjælpe meget - er det ikke bare fordi sFilename er tom?
Avatar billede kischi Novice
14. april 2009 - 20:18 #10
Jeg har nu prøvet debuggeren igen, og den stopper bare samme sted og kommer med samme fejl, men det kan meget vel være at du har ret i at det er fordi sFilename er tom.

Men ved du hvordan jeg gør så det er ligemeget om den er tom eller ej?
Fordi i nogle tilfælle skal den jo kunne være tom, andre gange har man skulle uploade en fil, men nu er det friviligt?

Tak
Avatar billede keysersoze Guru
14. april 2009 - 22:25 #11
du skal jo netop bruge debuggeren til at finde ud af hvad variabler osv er inden fejl opstår.

if (!string.isnullorempty(sFilename))
Avatar billede keysersoze Guru
06. juni 2009 - 09:54 #12
lukketid?
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