W ASP.Net (z C#) próbuję utworzyć plik .DAT z czystym tekstem i wysłać go do przeglądarki i wymusić pobieranie. Próbowałem kilku rzeczy, ale nie mogę tego uruchomić. W moim aspx akt istnieje ImageButton
Wymuszenie pobrania ASP.Net
<asp:ImageButton ID="btnSave" runat="server" CausesValidation="False" ImageUrl="~/Images/Stages/Database/Save.png" OnClick="btnSave_OnClick" Width="26px" />
W OnClick-metody Próbuję utworzyć plik i przesłać go do przeglądarki.
protected void btnSave_OnClick(object sender, EventArgs e)
{
string file = "test.dat";
string fileName = "~\\Stages\\Broekx\\Databanken\\" + file;
FileStream fs = new FileStream(MapPath(fileName), FileMode.Open);
long cntBytes = new FileInfo(MapPath(fileName)).Length;
byte[] byteArray = new byte[Convert.ToInt32(cntBytes)];
fs.Read(byteArray, 0, Convert.ToInt32(cntBytes));
fs.Close();
ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave");
btnSave.Visible = false;
File.Delete(Server.MapPath(fileName));
if (byteArray != null)
{
this.Response.Clear();
this.Response.ContentType = "text/plain";
this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
this.Response.BinaryWrite(byteArray);
this.Response.End();
this.Response.Flush();
this.Response.Close();
}
}
Plik test.dat znajduje się we właściwym folderze i musi zostać usunięty po przeczytaniu w bajtach. Próbowałem tego bez usuwania pliku i to też nie działa.
Po kliknięciu przycisku btnZapisz, przycisk musi być ukryty, dlatego ustawiam parametr Visible na false.
Próbowałem również z content-type "application/octet-stream" lub z plikiem PDF i typem treści "application/pdf", ale nic nie działa. Strona ładuje się normalnie i nie jest pobierany żaden plik.
Podejrzewam, że część odpowiedzi zostanie wysłana przed nagłówkami. Nie rozumiem też, w jaki sposób spodziewasz się jednej odpowiedzi, aby pobrać plik, i uczynić przycisk niewidoczny w tym samym czasie. – CodesInChaos
Pomyślałem coś podobnego, ale jak mogę to zrobić? – Yoni
Na marginesie: spójrz na 'File.ReadAllBytes', który może zastąpić 5 linii, których używasz do odczytania pliku. Powinieneś to robić tylko z bardzo małymi plikami, może nawet do 10kB. – CodesInChaos