firendeath
AsP-ler
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:
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
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:
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();
Server.Transfer("~/wait.aspx?" + s + "=");
}
}
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
Zuletzt bearbeitet: