با عرض سلام
دوستان من يك فايل را به صورت باينري در database ذخيره مي كنم حالا با استفاده از يك ديتاگريد مي خواهم كل جدولم را نمايش دهم و به جاي فايل مزبور در ستونهاي ديتاگريد،دكمه اي كه بتوان آن را دانلود كرد چه كار بايد بكنم؟
خواهش ميكنم كمك فوري
با عرض سلام
دوستان من يك فايل را به صورت باينري در database ذخيره مي كنم حالا با استفاده از يك ديتاگريد مي خواهم كل جدولم را نمايش دهم و به جاي فايل مزبور در ستونهاي ديتاگريد،دكمه اي كه بتوان آن را دانلود كرد چه كار بايد بكنم؟
خواهش ميكنم كمك فوري
سلام دوست عزیز؛
من پیشنهاد میکنم این کار رو انجام ندی!
چون برای سرورهای اشتراکی(با رم پایین) باعث هنگ کردن میشه!
فایلها رو در پوشه مشخصی ذخیره کن و لینک اونها رو در دیتا بیس بزار.
در اون پوشه فایل Web.config با تنظیمات زیر بگذار.
در webconfig:
<configuration>
<system.web>
<authorization>
<deny user="?"/>
</authorization>
</system.web>
</configuration>
راستی اضافه میکنم.
اگر بخوای صفحه "دسترسی غیر مجاز رو سفارشی کنی:
در فایل Web.config اضافه کن:
<customErrors mode="On" defaultRedirect="EFRR.html">
<error statusCode="403" redirect="Access_Out.html"/>
<error statusCode="404" redirect="Find_Out.html"/>
</customErrors>
یعنی اگر erorr در برنامه پیش اومد برو به صفحه EFRR.html، و اگر ... (نیازی به توضیح نداره).
سلام
از راهنماييتون خيلي ممنونم
اما قسمت مهم سؤال من ديتاگريدش بود فرض كنيد به صورت باينري ذخيره نكنم و آدرس فايل رو (مطابق توصيه شما)در ديتابيس ذخيره كنم حالا چه طور بايد در ديتاگريد ستوني قرار بدم كه با كليك بر روش فايل از درون ديتابيس دانلود شه؟
با Templateitem ؟ من كار باهاش رو بلد نيستم
تو رو خدا يكي جواب بده.
postbackurl چيه ؟ به چه درد مي خوره يا چه جوري مي تونم از ديتابيس يك آدرس رو بخونم و با زدن يك دكمه روي ديتاگريد اونو دانلود كنم من از CommandArgument استفاده كردم واونو بايند كردم ولي نميدونم چرا كار نميكنه
اگر براتون مهم نیست که لینک دانلود محرمانه بمون و می تونی از Item template استفاده کنی.
در ضمن
<asp:TemplateField HeaderText="download">
<ItemTemplate>
<div style="width:160px;"><a href='www.yuorsite.com/file/<%# Eval("link") %>' > download</a></div>
</ItemTemplate>
<HeaderStyle Font-Bold="False" Font-Size="9pt" HorizontalAlign="Center" />
</asp:TemplateField>
که به صورت لینک در میاد. اگر بخوای می تونی خوشگلترش بکنی مثلا یه عکس داخل تگ <a> بزاری که روش نوشته شده دانلود.
ساده. اما لینک ها محرمانه نمی مونه
<%# Eval("link") %>اسم فیلد دیتابیسته که بایند میشه. و لینک رو کامل می کنه
من اينكارو ميكنم اما به آدرس مربوطه نميره با وجود اينكه آدرسش رو در بالاي مرورگر هم نوشته ولي پيغام ميده
postback or callback invalid
در ادامه هم يه چيزايي درمورد اينكه به دلايل امنيتي نميشه اينكارو كرد و...
از يك template استفاده كردم به اين صورت
<asp:TemplateField HeaderText="فایلپیوست">كه extra آدرس فايلم در ديتابيس هست و بعد در رويداد RowCommand نوشتم:
<ItemTemplate>
<asp:ImageButton ID="LinkButton1" runat="server"
CommandName="DoDownload" ImageUrl="pic/downBTN-1.gif" CommandArgument='<%# Bind("extra") %>' ></asp:ImageButton>
</ItemTemplate></asp:TemplateField>
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)ولي وقتي روي دكمه ي ديتاگريدم كليك ميكنم صفحه اي نمايش داده ميشه كه توش نوشته:
{
if (e.CommandName == "DoDownload")
{
Response.Redirect(e.CommandArgument.ToString());
}
}
Server Error in '/WebSite1' Application.Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation
مقدار extra چیه؟
نام فيلدي هست كه آدرس فايلم در اون قرار داره در ديتابيس
به جای CommandArgument مقدار PostBackUrl روبایند کن و تابع کد بیهاند رو پاک کن.
احتمالا به جواب میرسی
PostBackUrl='<%# Bind("extra") %>'
مرسي از دوستان گرامي مشكلمو جور ديگه اي حل كردم