tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
968
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von firendeath
    firendeath firendeath ist offline AsP-ler
    Registriert seit
    Jun 2010
    Beiträge
    2
    Hallo erstmal,

    also ich bin seit längerem damit beschäftigt einen Fileuploader mit Progressbar zu programmieren.
    Vor kurzem hab ich es dann endlich hinbekommen, doch sofort krieg ich ein neues Problem.
    Wenn ich nach dem Event

    ProgressBar1.RunTask

    versuche einen Response.Redirect auf eine andere Seite auszuführen, bekomme ich gesagt das der Http-Header bereits abgeschickt wurde.
    Daraufhin habe ich nach einer anderen Methode für die Weiterleitung gesucht und bin auf Server.Transfer
    gestoßen, doch augenscheinlich reagiert er garnicht auf den Transfer...

    Danach dachte ich mir es wäre vllt. einfacher, wenn ich die Weiterleitung über die Page_Load - Funktion und ein Postback mache.... Pustekuchen
    1. Ich benötige eine Variable die in der ProgressBar1_RunTask - Methode generiert wird
    2. Am Ende der ProgressBar1_RunTask - Methode wird garkein Postback ausgeführ und ich konnte keinen Hinweis darauf finden, wie ich serverseitig ein Postback einleite

    Hier meine Lösungsansätze:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    
            protected void Page_Load(object sender, EventArgs e)
            {
                ProgressBar1.StartTaskButton = Button1.ID;
                ProgressBar1.RunTask += new EO.Web.ProgressTaskEventHandler(ProgressBar1_RunTask);
                if (!IsPostBack)
                {
                    DropDownList1.SelectedIndex = 4;
                }
            }
     
     
            /// <summary>
            /// Zufällige Zeichenkette bestehend aus Buchstaben und Zahlen
            /// </summary>
            /// <param name="Length"></param>
            /// <returns></returns>
            static public string RandomString(Int64 Length)
            {
                System.Random rnd = new System.Random();
                StringBuilder Temp = new StringBuilder();
                for (Int64 i = 0; i < Length; i++)
                {
                    if (rnd.Next(0, 2) == 1)
                        //Generiert einen Zufälligen Buchstaben
                        Temp.Append(Convert.ToChar(((byte)rnd.Next(26) + 65)).ToString());
                    else
                        //Generiert eine Zufällige Zahl
                        Temp.Append(rnd.Next(0, 9).ToString());
                }
                return Temp.ToString();
            }
     
     
     
            /// <summary>
            /// Button1 Klick Event
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public void ProgressBar1_RunTask(object sender, EO.Web.ProgressTaskEventArgs e)
            {
                if (FileUpload1.FileName != null)
                    if (FileUpload1.FileName != "")
                    {
                        string s = "";
                        string fileN = FileUpload1.FileName;
                        string realName = fileN;
                        do
                            s = RandomString(25);
                        while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path).Exists);
     
     
                        if (TextBox1.Text == "")
                        {
                            string re = fileN;
                            int i = 1;
                            do
                                if (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25)
                                {
                                    fileN = re;
                                    fileN = fileN + RandomString(i);
                                    i++;
                                }
                            while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25);
                        }
                        else
                        {
                            realName = TextBox1.Text;
                            string re = fileN;
                            int i = 1;
                            do
                                if (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25)
                                {
                                    fileN = re;
                                    fileN = fileN + RandomString(i);
                                    i++;
                                }
                            while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25);
                        }
                        bool einerSchritte = false;
                        FileStream fss = new FileStream(Path.Combine(VS_FileUploader.Properties.Resources.path, FileUpload1.FileName), FileMode.Create, FileAccess.Write);
                        BinaryWriter w = new BinaryWriter(fss);
     
                        if (FileUpload1.PostedFile.ContentLength <= 100)
                        {
                            einerSchritte = true;
                            ProgressBar1.Maximum = FileUpload1.PostedFile.ContentLength;
                        }
     
                        foreach (byte b in FileUpload1.FileBytes)
                        {
                            w.Write(b);
     
                            if (einerSchritte)
                                e.UpdateProgress(ProgressBar1.Value++);
                            else if (Convert.ToDouble(fss.Length) % Convert.ToDouble(FileUpload1.PostedFile.ContentLength / 100) == Convert.ToDouble(0))
                                e.UpdateProgress(ProgressBar1.Value++);
                            //EO.Web.ProgressTaskEventArgs f = ProgressBar1.
                        }
                        w.Flush();
                        w.Close();
                        fss.Dispose();
                        fss.Close();
                        System.IO.FileStream fs = new System.IO.FileStream(VS_FileUploader.Properties.Resources.path + s, System.IO.FileMode.Create, System.IO.FileAccess.Write);
                        System.IO.StreamWriter ww = new System.IO.StreamWriter(fs);
                        ww.WriteLine(VS_FileUploader.Properties.Resources.path + fileN);
                        ww.WriteLine(realName);
                        ww.WriteLine(DropDownList1.SelectedIndex + 1);
                        ww.Dispose();
                        ww.Close();
                        fs.Dispose();
                        fs.Close();
     
    [B]
    Server.Transfer("~/wait.aspx?" + s + "=");
    [/B]
                    }
            }

    Das Event ProgressBar1_RunTask wird beim Klick auf den Button1 ausgeführt.
    Dann wird, wenn das FileUpload1 - Feld eine Datei enthält, eine Datei mit einem Kryptischen Namen erstellt über die später der Download geregelt wird.
    Dann wird die Datei byte-weise ausgelesen und bei jedem File.Length / 100 tem Byte wird die ProgressBar.value um 1 erhöht.
    Danach sollte er eig. den Redirect ausführen... macht er aber nicht.

    Bin echt ratlos so langsam,
    hoffe euch fällt was hierzu ein.

    Liebe Grüße,
    Firen
    Geändert von firendeath (02.06.10 um 09:02 Uhr) Grund: Rechtschreibfehler ...
     

  2. #2
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    bist im falschen Forum hier. Es gibt auch einen NET Bereich hier bei Tutorials, da sitzen die Profies. Einfach einen Moderator anschreiben, der verschiebt Diich in die Schublade.

    Mich wundert auch so manches und ich weiß aus ASP.NET Anfänger-Erfahrung, dass man sich oft den Wolf nach Lösungen sucht.

    Hast Du mal überlegt, den Upload-Prozessbar-Prozess in eine Funktion(boolean) auszulagern mit Return true als Ergebnis, wenn alles stimmt.

    Dieses Ergebnis im Buttonevent mit einer Abfrage generieren.
     
    liebe Grüße, die Luzie

  3. #3
    tequila slammer tequila slammer ist offline Mitglied Gold
    Registriert seit
    Aug 2006
    Beiträge
    203
    Warum erstellst du dir nicht ein UploadCompletedEvent, dass du wirst, wenn der Upload erledigt ist. Anschließend kannst du darin doch dein Server.Transfer aufrufen.
     

  4. #4
    Avatar von firendeath
    firendeath firendeath ist offline AsP-ler
    Registriert seit
    Jun 2010
    Beiträge
    2
    Weil ich nicht weiß wie das geht...
    Gibt es nicht eine simple Lösung wie ich aus einer Funktion, also NACHDEM der http-header gesendet wurde, eine Weiterleitung ausführen kann ?
     

  5. #5
    tequila slammer tequila slammer ist offline Mitglied Gold
    Registriert seit
    Aug 2006
    Beiträge
    203
    Sei jetzt nicht böse aber Google mit c# events zu befragen kostet nicht die Welt. Und um deine Frage noch zu beantworten - nein außer diesen beiden gibt es vom Framework her nichts fertiges.
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 21.04.09, 03:03
  2. IIS Server und Companyweb funktionieren nicht mehr!
    Von DerHeld im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 20.07.06, 13:48
  3. Antworten: 2
    Letzter Beitrag: 23.09.04, 18:39
  4. Problem : response.redirect und page.ispostback
    Von Birk im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 01.07.04, 15:46
  5. Antworten: 8
    Letzter Beitrag: 27.09.02, 15:15

Stichworte