PDA

View Full Version : دانلود فایل بدون باز شدن آن



Pioneers
سه شنبه 24 بهمن 1385, 11:13 صبح
یه فایل مثلا pdf داریم که میخوایم کاربران سایت دانلود کنن ولی این فایل در پنجره مرورگر باز نشه. و پنجره معروف open / save / cancel باز بشه. راهش چیه؟

علت: کاربر آدرس فایل رو ندونه تا نتونه سایر فایلها رو دانلود کنه.

Alireza_Salehi
سه شنبه 24 بهمن 1385, 11:32 صبح
اگر قراره نتونه دانلود کنه مخفی کردن آدرس فایده ای نداره،اگر فایل هایی وجود دارند که نباید دانلود بشن شما بهتره سطح دسترسی تعیین کنی که اونهایی که اجازه دارند دانلود کنند.


در ضمن همه که از IE استفاده نمی کنند!!!

Pioneers
چهارشنبه 25 بهمن 1385, 00:53 صبح
ببخشید کاملتر توضیح میدم:

یکسری فایل pdf هست که همه باید قابل دانلود باشند ولی برای افراد مختلف و هر فرد فقط بتونه فایلهای خودش رو ببینه و لاغیر. بطور عادی فایل Pdf داخل مرورگر باز میشه و آدرس اون معلومه. کافیه آدرس رو کاربر عوض کنه تا فایلهای دیگران رو هم ببینه(نام فایلها یک عدد n رقمی است

باید راهی باشه که کاربر آدرس رو نبینه...
نمیدونم اگه فایل رو در یه پنجره جدید بدون نوار آدرس باز کنم حل میشه یا نه؟

samanes
چهارشنبه 25 بهمن 1385, 11:38 صبح
با استفاده از HTTPREFERRER میتونی کنترل کنی که چه کسایی به فایل دسترسی داشته باشند. و با استفاده ازResponse.ContentType اگه با query نام صفحه رو ارسال کنی میتونی کاری کنی که فایل فقط دانلود شه. برای اینکار به Response.ContentType مقداری رو اختصاص میدی که برای Browser شناخته شده نباشه که در مثالی که در زیر براتون آوردم از application/octet-stream استفاده کردم که تو مثالهای مایکروسافت هم از او استفاده شده




string strFileName = Request.Params["FileName"];
if ((strFileName != null) && (strFileName != ""))
{
string strPath = Server.MapPath("~/_private");
string strPathName = strPath + "\\" + strFileName;
if (System.IO.File.Exists(strPathName))
{
string strFileExtension = System.IO.Path.GetExtension(strFileName);
Response.Clear();
switch (strFileExtension.ToUpper())
{
case ".GIF":
Response.ContentType = "image/gif";
Response.AddHeader("Content-Transfer-Encoding", "binary");
break;
case ".JPG":
case ".JPEG":
Response.ContentType = "image/jpeg";
Response.AddHeader("Content-Transfer-Encoding", "binary");
break;
case ".PDF":
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.AddHeader("Content-Disposition", "attachment;filename=" + strFileName);
break;
}
Response.Flush();
Response.WriteFile(strPathName);
}

Pioneers
پنج شنبه 26 بهمن 1385, 10:58 صبح
تشکر از شما

اما 2 تا اشکال وجود داره:
1-فایل با نام صفحه ذخیره میشه.( مثلا wbeform1.aspx)
2-اگه از Response.Flush استفاده کنیم، محتوای صفحه به فایل اضافه شده سپس ذخیره می گردد. که با نوشتن Response.End میشه اینو حل کرد.

Pioneers
پنج شنبه 26 بهمن 1385, 14:28 عصر
ببخشید من اون خط شامل attachment رو ننوشته بودم. و با نوشتنش یکی از مشکلات حل شد. اما یه مشکل دیگه انگار وجود داره. مثلا نمیشه پیغامی به کاربر نشون داد که مثلا از mirror استفاده کنه و ....

samanes
پنج شنبه 26 بهمن 1385, 23:58 عصر
این کد هایی که نوشتم در صفحه ای قرار می گیره مثلا به اسم Download
فایل PDF هم طبق کد در پوشه ای قرار داده می شه مثلا به اسم _Private
که حق دسترسی های لازم به اون پوشه اعمال می شه. لینک دانلود فایل در صفحه مورد نظر به صورت زیر نوشته می شه:

<a href="download.aspx?filename=x.PDF"> Download x.PDF </a>

Pioneers
جمعه 27 بهمن 1385, 08:51 صبح
استفاده از کد رو که میدونم...

اما ظاهرا نمیشه داخل این صفحه پیغامی به کاربر نشون داد. چرا که یه Response,Clear اول کد و یه Response.End اخر کد داریم که باعث میشن پیغامها از بین برن. مگه اینکه راهی باشه که دوستان بدونن که در اینصورت منتظریم...

samanes
جمعه 27 بهمن 1385, 11:04 صبح
دوست عزیز باز هم در استفاده از کدها دقت کن. این کد پیغام مد نظر شما را نشان می دهد. این کپی کدهایی که در یکی از پروژه هام از اون استفاده کردم و کاملا کار می کنه...

Pioneers
جمعه 27 بهمن 1385, 22:01 عصر
اگه از روش شما استفاده کنیم یه صفحه بار میشه که با بازشدنش فایل دانلود میشه ولی خود صفحه چیزی نشون نمیده (یه چیزی تو مایه های The page cannot be displayed) و با کد هم بسته نمیشه.

من از inline بجای attachment استفاده کردم خطا داد...
اگه این صفحه ی شامل کد دانلود فایل, نشون داده نشه عالیه.

samanes
شنبه 28 بهمن 1385, 02:22 صبح
این فایل رو چک کن

Pioneers
سه شنبه 01 اسفند 1385, 15:55 عصر
آقا عالی بود. ممنان!

باور کنید منم همین کدا رو نوشتم ولی...
در ضمن, من نازی رو طلاق نمیدم.