PDA

View Full Version : نمایش فایلهای ارسالی در آپلود سنتر



faramarz_s
دوشنبه 18 اسفند 1382, 10:07 صبح
در یک آپلود سنتر آدرس فایهای آپلود شده در دیتا بیس ذخیره می شود.
برفرض آدرس زیر در فیلدی بنام FA ذخیره شده است.نمونه مسیر ذخیره بر روی هاست

string FileNameOnServer = @"D:\Inetpub\wwwroot\School\VoiceFiles\" + File1.PostedFile.FileName.Substring(File1.PostedFi le.FileName.LastIndexOf(@"\")+1);
آدرس فایلی به نام a.wav یا b.gif ذخیره شده است.حالا برای نمایش لینک این فایل در آپلود سنتر و قرار دادن امکان دانلود آن توسط کاربران راهای زیر پیشنهاد شده است:
1-QueryString
2-آدرس دهی مستقیم فایل آپلود شده(نمایش مستقیم مقدار فیلد FA در قالب Hyperlink)
3-؟
---------------------------------------------------------------------------------

*پیشنهاد شما چیست ؟

**کد مربوط به کویری استرینگ چگونه باید نوشته شود (با فرض مثال اخیر)

***اینکه من آدرس فایل آپلود شده را در دیتا بیس ذخیره می کنم نه خود فایل را !ممکنه کار را کمی پیچیده بکنه اما مشخصا کارایی را افزایش می ده.در این مورد هم نظر خود را عنایت فرمایید. :wink:
تشکر :oops:

faramarz_s
سه شنبه 19 اسفند 1382, 11:04 صبح
:flower:

Abbas Arizi
سه شنبه 19 اسفند 1382, 20:02 عصر
1- هر دو روش خوبه. ولی اگه بخوای کسی آدرس مستقیم فایلها رو به راحتی پیدا نکنه بهتره از Query String استفاده کنی.
2- بهتره ID فایل در دیتابیس رو توی QueryString قرار بدی و بعد بقیه اطلاعات رو از طریق ID پیدا کنی.
3- خود فایل رو چه طوری میخوای توی دیتابیس قرار بدی و بعد بازیابی کنی؟ :o

Farhad.B.S
سه شنبه 19 اسفند 1382, 20:35 عصر
روش کار به این صورت هست :
1.شما تو یه جایی (مثلا یکی از رکورد های یه جدول تو دیتابیس یا تو یه فایل مثل web.config ) اسم ساب دایرکتوری رو که قراره فایل ها داخلش باشند رو ذخیره میکنید (فقط اسم دایرکتوری رو) مثلا : UploadDirectory
این ساب دایکتوری باید در محلی باشه که دایرکتوری اصلی پروژه شما در اونجا قرار داره . مثلا :


C:\Inetpub\wwwroot\YourProjectDirectory\UploadDire ctory


2.سایر فایل هایی رو که قراره در آپلود سنتر قرار بگیرند به این صورت در دیتابیس ذخیره میکنید : فقط اسم فایل !
مثلا : File1.txt

3.برای ایجاد لینک به این فایل ها از این روش استفاده میشه :


string download_dir;
string file_name;
string download_link;

//read download directory name and file name from database or web.config
download_dir = System.Configuration.ConfigurationSettings.AppSett ings["DownloadDir"];
file_name = "file1.txt"; //you must read it from database !
download_link = "<A HREF='" + download_dir + "/" + file_name + "'> ! بدانلودید </A>";

Response.Write(download_link);


-------------------------------------------------------------


**کد مربوط به کویری استرینگ چگونه باید نوشته شود (با فرض مثال اخیر)

اگه منظورتون اینه که یه صفحه مثل download.aspx داشته باشید که با فرستادن یه پارامتر فایل مورد نظر رو تحویل کاربر بده ، میتونید یه مقداری رو (مثلا id اون فایل رو که منحصر به فرد هست و زمان ثبت شدن اون فایل ، وارد دیتابیس شده) به این صفحه ارسال کرده و باقی ماجرا ...

faramarz_s
سه شنبه 19 اسفند 1382, 21:46 عصر
تشکر پس نتیجه:
کویری استرینگ که از دیتابیس آیدی فایل آپلود شده را بخواند.من هم همین را حدس می زدم.

rsalimian
جمعه 22 اسفند 1382, 00:18 صبح
من یه سوال از این آپلود سنترتون داشتم. لطفا راهنمایی کنید.
آپلود فایل با نام تکراری باید اصولا ممکن باشه. درسته؟
ممکنه 2 فایل مختلف توسط دو شخص همزمان آپلود بشه. بنظر من نباید برنامه خطا بده که نام فایل تکراریه و باید بکمک GUID هر دو را ذخیره کنه.

faramarz_s
جمعه 22 اسفند 1382, 16:53 عصر
اگر نام و پسوند یمک فایل یکی باشد یعنی دقیقا یک فایل باشند این به معنای دوباره کاری نیست؟
به کاربر پیغام می دهیم این فایل موجوده سعی در ارسال نکن!

rsalimian
شنبه 23 اسفند 1382, 11:30 صبح
ولی این حالت هم وجود دارد که فایل با نام تکراری ولی محتوای متفاوت آپلود شود.
و به عقیده من منصفانه نیست که به کاربر گفته بشود که نام فایل تکراری است.
البته نظر شما هم درست است. خب این دیگه به نظر طراح در موقع طراحی بستگی دارد که حالت تکراری چگونه مدیریت شود.

faramarz_s
یک شنبه 24 اسفند 1382, 21:10 عصر
download_link = " ! بدانلودید ('" + download_dir + "/" + file_name + "')";

Response.Write(download_link);

همانطور که ملاحظه می فرمایید راهکار دوست بزرگوارم بر پایه کنترلهای سرور نبوده و با مدد شی Response صورت گرفته:
1-این راهکار امتحان شد و کاملا درست جواب داد.تشکر
2اگر همین را بشود در قالب HyperLink پیاده سازی کنیم کد نویسی آن چگونه خواهد بود؟ :!:

Farhad.B.S
یک شنبه 24 اسفند 1382, 22:02 عصر
دقیقا میخواید چی کار کنید :? ؟
فکر نمیکنم تفاوتی بین یه هایپر لینک ایجاد شده به صورت دستی و یه لینک باتون باشه . اگه منظورتون از این کار اینه که یوزر نتونه به آدرس دقیق فایل دست پیدا کنه میتونید یه صفحه مثل downloads.aspx داشته باشید که آی دی فایل مربوطه رو دریافت کرده ، پس از اون آدرس فایل رو از دیتابیس خارج کنه و در نهایت با استفاده از کد زیر فایل رو برای کاربر ارسال کنه :
(هر چند که اگه یه برنامه مدیریت دانلود مثل DAP روی سیستم بیننده نصب باشه ، باز هم این روش موفق نخواهد بود)


string filename;
filename = Server.MapPath("explorer.exe");
Response.ContentType = "multipart/mixed";
Response.WriteFile(filename);
Response.End();

برای موردی که خواستید (پیاده سازی در قالب هایپرلینک و کنترل های سمت سرور) ابتدا باید کنترل مورد نظر رو ایجاد کنید و بعد یه Event handler برای اون تعریف کنید.

faramarz_s
دوشنبه 25 اسفند 1382, 14:05 عصر
فکر نمیکنم تفاوتی بین یه هایپر لینک ایجاد شده به صورت دستی و یه لینک باتون باشه
1-این مورد را برای کدام سوال فرموده اید؟
2-
برای موردی که خواستید (پیاده سازی در قالب هایپرلینک و کنترل های سمت سرور) ابتدا باید کنترل مورد نظر رو ایجاد کنید و بعد یه Event handler برای اون تعریف کنید.
خواسته من مشخصا نمونه کد همین بود ممکنه؟ :oops:

Farhad.B.S
دوشنبه 25 اسفند 1382, 18:21 عصر
بفرمایید :



public void MyLinkButton_Click(object sender,System.EventArgs e)
{
//insert your code here
long file_id;
file_id=1;
Response.Redirect("Downloads.aspx?id=" + file_id.ToString());
}

private void Page_Load(object sender, System.EventArgs e)
{
LinkButton lb = new LinkButton();
lb.Text = "click here !";
//specify an event handler for this LinkButton
lb.Click += new EventHandler(MyLinkButton_Click);
Panel1.Controls.Add(lb);

}

faramarz_s
سه شنبه 26 اسفند 1382, 17:19 عصر
تشکر :mrgreen: