View Full Version : سوال: مشکل در هنگام دانلود فایل
veniz2008
یک شنبه 15 خرداد 1390, 12:08 عصر
سلام دوستان،من در پروژم در بخش دانلود یه مشکل دارم،در صفحه دانلود از یک gridview برای نمایش فایلها استفاده کردم و یک buttonfield به گرید اضافه کردم تا کاربر با کلیک این دکمه فایل مورد نظرش رو دانلود کنه،فایلها در روت پروژه و در پوشه adminfiles ذخیره شدن،اما مشکل اینجاست که با کلیک این دکمه به جای اینکه فایل مورد نظر(مثلا عکس یا آهنگ)دانلود بشه،به جاش صفحه asp من دانلود میشه،من کدها رو میذارم،دوستان لطف کنید بگید مشکل کجاست،تشکر.
filename.Text = GridView1.Rows[e.RowIndex].Cells[0].Text.Trim();
Response.AppendHeader("content-disposition", "attachment; filename=" + Request[Server.MapPath(".") + "\\adminfiles\\"+ filename.Text]);
Response.TransmitFile(Server.MapPath(".")+"\\adminfiles\\"+ filename.Text);
Response.End();
یه عکس از صفحه دانلود پروژم:
70734
hesamsalehnamadi
یک شنبه 15 خرداد 1390, 16:04 عصر
اینو امتحان کن ، در قسمت aspx
<asp:TemplateField HeaderText="Download" meta:resourcekey="TemplateFieldResource5">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandArgument='<%# Eval("Picture") %>'
ImageUrl="~/images/DownLoads.gif" OnClick="ImageButton1_Click" CausesValidation="False" meta:resourcekey="ImageButton1Resource1" />
</ItemTemplate>
</asp:TemplateField>
و در قسمت code behind
protected void DownloadFile(string name)
{
string _path = Request.PhysicalApplicationPath + "Album\\" + name;
System.IO.FileInfo _file = new System.IO.FileInfo(_path);
if (_file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + _file.Name);
Response.AddHeader("Content-Length", _file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(_file.FullName);
Response.End();
}
else
{
ClientScript.RegisterStartupScript(Type.GetType("System.String"), "messagebox", "<script type=\"text/javascript\">alert('Sorry no image found');</script>");
}
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string _Name = ((ImageButton)sender).CommandArgument;
DownloadFile(_Name);
}
veniz2008
یک شنبه 15 خرداد 1390, 17:51 عصر
تشکر از کدی که گذاشتی،اما منطقی نیست که 3 خط رو با 30 خط ! جایگزین کنم،قبلا دوستان در سایت کدهای دانلود رو گذاشتن،اما نمیدونم کجای کار ایراد داره،دوستان اگه با همین کدهای خودم راهنمایی کنید ممنون میشم،تشکر.
hesamsalehnamadi
یک شنبه 15 خرداد 1390, 19:53 عصر
تشکر از کدی که گذاشتی،اما منطقی نیست که 3 خط رو با 30 خط ! جایگزین کنم،قبلا دوستان در سایت کدهای دانلود رو گذاشتن،اما نمیدونم کجای کار ایراد داره،دوستان اگه با همین کدهای خودم راهنمایی کنید ممنون میشم،تشکر.
دوست عزیزم اصلا ناراحت نشو من کد تورو یکم تغییر دادم در حدود 2 خط ولی فکر کنم در این حد دیگه لازمه
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Convert.ToInt32(e.CommandArgument);
FileInfo file = new FileInfo(Path.Combine(Server.MapPath("~/adminfiles"), GridView1.Rows[index].Cells[0].Text));
Response.AppendHeader("content-disposition", "attachment; filename="+file.Name);
Response.TransmitFile(file.FullName);
Response.End();
}
اضافه کردن Using System.IO یادت نره
veniz2008
دوشنبه 16 خرداد 1390, 16:28 عصر
دوست عزیزم اصلا ناراحت نشو
int index = Convert.ToInt32(e.CommandArgument);
تشکر دوست من،چرا ناراحت شم،کد شما مشکلم رو رفع کرد،فقط خط اول رو بصورت زیر تغییر دادم(در واقع commandArgument رو نشناخت):
int index = Convert.ToInt32(e.RowIndex);
بازم تشکر.
hesamsalehnamadi
دوشنبه 16 خرداد 1390, 21:40 عصر
تشکر دوست من،چرا ناراحت شم،کد شما مشکلم رو رفع کرد،فقط خط اول رو بصورت زیر تغییر دادم(در واقع commandArgument رو نشناخت):
int index = Convert.ToInt32(e.RowIndex);
بازم تشکر.
درسته چون من از rowCammand گریدویو استفاده کرده بودم .. خوشحالم که مشکلت حل شد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.