PDA

View Full Version : مبتدی: دانلود از يك فيلد ديتابيس با استفاده از ديتاگريد



zahraf
شنبه 19 تیر 1389, 18:55 عصر
با عرض سلام
دوستان من يك فايل را به صورت باينري در database ذخيره مي كنم حالا با استفاده از يك ديتاگريد مي خواهم كل جدولم را نمايش دهم و به جاي فايل مزبور در ستونهاي ديتاگريد،دكمه اي كه بتوان آن را دانلود كرد چه كار بايد بكنم؟
خواهش ميكنم كمك فوري

MoslemMaleki
شنبه 19 تیر 1389, 22:15 عصر
سلام دوست عزیز؛
من پیشنهاد میکنم این کار رو انجام ندی!
چون برای سرورهای اشتراکی(با رم پایین) باعث هنگ کردن میشه!
فایلها رو در پوشه مشخصی ذخیره کن و لینک اونها رو در دیتا بیس بزار.
در اون پوشه فایل Web.config با تنظیمات زیر بگذار.
در webconfig:


<configuration>
<system.web>
<authorization>
<deny user="?"/>
</authorization>
</system.web>
</configuration>

MoslemMaleki
شنبه 19 تیر 1389, 22:21 عصر
راستی اضافه میکنم.
اگر بخوای صفحه "دسترسی غیر مجاز رو سفارشی کنی:
در فایل 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، و اگر ... (نیازی به توضیح نداره).

zahraf
یک شنبه 20 تیر 1389, 22:59 عصر
سلام
از راهنماييتون خيلي ممنونم
اما قسمت مهم سؤال من ديتاگريدش بود فرض كنيد به صورت باينري ذخيره نكنم و آدرس فايل رو (مطابق توصيه شما)در ديتابيس ذخيره كنم حالا چه طور بايد در ديتاگريد ستوني قرار بدم كه با كليك بر روش فايل از درون ديتابيس دانلود شه؟
با Templateitem ؟ من كار باهاش رو بلد نيستم

zahraf
جمعه 25 تیر 1389, 19:45 عصر
تو رو خدا يكي جواب بده.:افسرده:
postbackurl چيه ؟ به چه درد مي خوره يا چه جوري مي تونم از ديتابيس يك آدرس رو بخونم و با زدن يك دكمه روي ديتاگريد اونو دانلود كنم من از CommandArgument استفاده كردم واونو بايند كردم ولي نميدونم چرا كار نميكنه

hlikehamed
جمعه 25 تیر 1389, 20:01 عصر
اگر براتون مهم نیست که لینک دانلود محرمانه بمون و می تونی از 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") %> اسم فیلد دیتابیسته که بایند میشه. و لینک رو کامل می کنه

zahraf
جمعه 25 تیر 1389, 20:08 عصر
من اينكارو ميكنم اما به آدرس مربوطه نميره با وجود اينكه آدرسش رو در بالاي مرورگر هم نوشته ولي پيغام ميده
postback or callback invalid
در ادامه هم يه چيزايي درمورد اينكه به دلايل امنيتي نميشه اينكارو كرد و...

hlikehamed
جمعه 25 تیر 1389, 20:14 عصر
من اينكارو ميكنم اما به آدرس مربوطه نميره با وجود اينكه آدرسش رو در بالاي مرورگر هم نوشته ولي پيغام ميده
postback or callback invalid
در ادامه هم يه چيزايي درمورد اينكه به دلايل امنيتي نميشه اينكارو كرد و...

اینی که من گذاشتم ربطی به پست بک و این چیزا نداره. چون یه لینک ساده است و نهایت خطایی که بده اینه که فایل رو پیدا نکنه.
یا درست بایند نشه و یه خطا بده.
بیشتر توضیح بده که چیکار کردی؟

zahraf
جمعه 25 تیر 1389, 21:03 عصر
از يك template استفاده كردم به اين صورت

<asp:TemplateField HeaderText="فایل پیوست">
<ItemTemplate>
<asp:ImageButton ID="LinkButton1" runat="server"
CommandName="DoDownload" ImageUrl="pic/downBTN-1.gif" CommandArgument='<%# Bind("extra") %>' ></asp:ImageButton>
</ItemTemplate></asp:TemplateField>

كه extra آدرس فايلم در ديتابيس هست و بعد در رويداد RowCommand نوشتم:


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

rajabpour
جمعه 25 تیر 1389, 21:13 عصر
مقدار extra چیه؟

zahraf
جمعه 25 تیر 1389, 21:28 عصر
نام فيلدي هست كه آدرس فايلم در اون قرار داره در ديتابيس

hlikehamed
جمعه 25 تیر 1389, 21:33 عصر
به جای CommandArgument مقدار PostBackUrl روبایند کن و تابع کد بیهاند رو پاک کن.
احتمالا به جواب میرسی

PostBackUrl='<%# Bind("extra") %>'

rajabpour
جمعه 25 تیر 1389, 21:35 عصر
نام فيلدي هست كه آدرس فايلم در اون قرار داره در ديتابيس
بله میدونم ماهیتش چیه...

یکی از مقدارهاش رو بگذارید.

zahraf
شنبه 26 تیر 1389, 19:34 عصر
مرسي از دوستان گرامي مشكلمو جور ديگه اي حل كردم:قلب:

s@nb@l
دوشنبه 11 مرداد 1389, 20:39 عصر
مرسي از دوستان گرامي مشكلمو جور ديگه اي حل كردم:قلب:

سلام

چه جوري حلش كردين چون مشكل منم هست؟

با تشكر