PDA

View Full Version : سوال: حجم یک فایل در اینترنت



www.pc3enter.tk
دوشنبه 14 تیر 1389, 18:19 عصر
سلام

می خواستم بدانم که چطور می شود یک فایل در اینترنت را حجم آن را با استفاده از FileLen بدست آورد.
لطفا اگر می شود به طور روشن توضیح دهید
باتشکر.

محسن شامحمدی
دوشنبه 21 تیر 1389, 13:34 عصر
دوست عزیز اصلا با تابع FileLen تمکان چنین کاری وجود ندارد

parselearn
سه شنبه 22 تیر 1389, 11:42 صبح
شما بايد تركيبي از برنامه نويسي وب و ويندوز رو انجام دهيد
آدرس فايل رو به يك اسكريپت در اينترنت ارسال كنيد
اون حجم رو حساب كنه
خروجي بده...

FinalMOB
سه شنبه 22 تیر 1389, 14:34 عصر
سلام

می خواستم بدانم که چطور می شود یک فایل در اینترنت را حجم آن را با استفاده از FileLen بدست آورد.
لطفا اگر می شود به طور روشن توضیح دهید
باتشکر.
با سلام
اين برنامه ي ساده يه آدرس ميگيره، و از سرور درخواست مي كنه كه حجم فايل رو بهش بده.

موفق باشيد

ramzdar
سه شنبه 02 شهریور 1389, 04:56 صبح
اگه میشه یه توضیح درباره کدهای این سورس و مخصوصاً کنترل Internet Transfer بدین که بفهمیم چی به چیه.

xxxxx_xxxxx
چهارشنبه 03 شهریور 1389, 00:20 صبح
اگه میشه یه توضیح درباره کدهای این سورس و مخصوصاً کنترل Internet Transfer بدین که بفهمیم چی به چیه.
سلام،
کنترل Inet یا Internet Transfer ابزاری ست که به سادگی امکان ارتباط برقرار کردن با یک وب سرور رو فراهم میکنه (هم از طریق HTTP و هم FTP). کنترل ساده و جمع و جوری هست.

این کنترل، دو متود اصلی برای دانلود یک فایل داره با نام OpenURL و Execute که در این برنامه از متود Execute استفاده شده.
از نوع مقداردهی آرگومان های این متود مشخص هست که پروتکل ارتباطی ما HTTP هست، چون هر چهار پارامتر مقداردهی شدند. (برای FTP نیازی به مقداردهی دو پارامتر آخر نیست)

چون ارتباط HTTP هست، نیازی به Username و Password نداریم. در اول برنامه username و password رو خالی گذاشته. اصلاً این دو خط رو حذف کنید. نیازی به این کار نیست.

URL رو هم در خط اول برنامه مقدار داده که همون آدرس فایل موردنظرمون هست. شما می تونید این خط رو هم حذف کنید، و URL رو از طریق آرگومان اول متود Execute وارد کنید، یعنی اینجوری:


Inet.Execute Text1.Text, "GET", , "Range: bytes=" & "0-" & vbCrLf
به هر حال URL رو باید به یکی از این دو شکل وارد کرد.

توی TextBox که URL ما باشه نوشته شده:

http://dl.finalmob.com/software/both/Photobook1.40.S60v3.S60v5.SymbianOS9x.2icon.unlimi ted.trial.Cracked.by.ice.Angel_FinalMOB.com.exehtt p موجود در اول URL رو چه بزارید و چه نزاری فرقی نمی کنه در هر دو صورت ما داریم از http استفاده می کنیم.

تو خطی که دستور Execute نوشته شده، پارامتر دوم یکی از پیغام هایی هست که میخوایم ارسال کنیم. در اینجا پیغام GET رو ارسال می کنیم. از GET اینجا برای گرفتن یک سری اطلاعات در مورد یک فایل روی سرور استفاده می کنیم. پیغام های مورد استفاده برای HTTP عبارتند از GET, POST، PUT و HEAD.

حالا من نمی دونم چرا کسی که این برنامه رو نوشته، از دستور GET استفاده کرده! دستور GET برای دانلود کردن خود فایل هست و این کار باعث میشه فایل دانلود بشه تا جایی که بافر Inet ما پر بشه. فکر میکم سایز بافر هم حدود صد کیلوبایت باشه! (شاید هم بیشتر)
در صورتی که اگه شما میخواید فقط سایز فایل رو بدست بیارید کافی هست فقط Header رو دریافت کنید. برای این کار از دستور HEAD استفاده می کنیم. پس بنابراین سرعت بسیار زیاد میشه و سریعتر به نتیجه میرسیم و فقط Header فایل رو دانلود می کنیم نه خود فایل. که سایز Header به صد بایت هم نمیرسه.
پس دستور Execute رو به این شکل تغییر بدید تا وضعیت بهبود پیدا کنه:


Inet.Execute , "HEAD"
البته اگر سایز فایل خیلی زیاد هست، بهتر این هست که از همون GET استفاده بشه.

چون متود Execute در Background اجرا میشه، کنترل برنامه سریعاً به خط بعد میره و سایر دستورات رو اجرا میکنه، در حالی که هنوز نتیجه درخواستمون از سرور رو دریافت نکردیم. پس باید یک جوری از اجرای سایر دستورات جلوگیزی کنیم تا جواب درخواستمون برسه. برای همین، از این حلقه استفاده شده:


While Inet.StillExecuting
DoEvents
Wend
که کاملاً مشخص هست داره چه اتفاقی میوفته و نیازی به توضیح نداره.

در آخر هم با متود GetHeader بخشی از Header رو میخونیم و در متغیر میزاریم. اون بخشی که مربوط به سایز فایل هست. (Content_Lentgth). اندازه فایل بر حسب بایت هست که در آخر به KB تبدیل شده.

موفق باشید/