PDA

View Full Version : سوال: نمایش دانلود فایل از طریق دستورات Response



si6arp
شنبه 10 اردیبهشت 1390, 14:22 عصر
با سلام
من با استفاده از متود GET بک درخواست به یک آدرس (http://www.1.com/1.rar) ارسال میکنم و جواب آن (Response) محتوای فایل مورد نطز همراه با یک سری هدر هایی هست به سرور باز میگردد .
محتوای فایل به صورت باینری به سرور باز میگردد . (تکه ای از بازگشت به صورت زیر است )



ÿØÿà
 ÿÛ


حال میخوام که این بازگشت در قالب یک فایل با همان پسوند برای دانلود به کاربر ارائه شود.
شنیدم که با دستورات Response میشه این کار رو انجام داد.
لطفا من رو راهنمایی کنید

hlikehamed
دوشنبه 12 اردیبهشت 1390, 11:26 صبح
سلام

می تونید از لینک زیر کمک بگیرید :

http://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/4f934429-08f4-464d-b028-ab4936029eb9

توی انجمن هم زیاد بحث شده در موردش. یه جستجو کنید.

باید از نمونه دستورات زیر استفاده کنید:

string attachment = "attachment; filename=Contacts.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
Response.Write(file);
Response.End();

توجه داشته باش که این قطعه کدی که نوشتم کامل نیست.
توی لینکی که دادم کاملا توضیح داده با نمونه کد.

si6arp
دوشنبه 12 اردیبهشت 1390, 11:41 صبح
داستانم ایجاس که قایل رو به صورت بایت به بایت از مبدا میخونه و میخوام همان زمان تحویل کاربر بده.
با کدی که شما نوشته اید و خیلی جاها هست میاد تمام بایت های مبدا را یک جا دریافت میکنه و یکجا هم تحویل کاربر میده که اینطوری خیلی تول میکشه. فرض کنید فایل مبدا 2 گیگ باشه. حالا میاد تمام 2 گیگ رو خونده و بعد تحویل میده. می میخوام مثلا 10 کیلوبایت به 10 کیلوبایت از مبدا بخونه و تحویل کاربر بده.

hlikehamed
دوشنبه 12 اردیبهشت 1390, 11:50 صبح
نمونه کدی که گذاشتم برای این بود که بدونی از چه دستوراتی استفاده کنی.
لینکی که گذاشتم برات رو یه نگاه بنداز (جواب اول) بایت به بایت write می کنه فکر کنم.

این تیکه از کدی که نوشته رو نگاه کن :



if ( Response.IsClientConnected ) { // Read the data into the buffer and write into the // output stream. byte[] buffer = new Byte[10000]; int length = stream.Read( buffer, 0, 10000 ); Response.OutputStream.Write(buffer, 0, length); Response.Flush(); // We have already read some bytes.. need to read // only the remaining. bytesToRead = bytesToRead - length; } else { // Get out of the loop, if user is not connected anymore.. bytesToRead = -1; } }