یافتن میزان آپلود فایل

farik

Well-Known Member
با سلام..
اول یک چیزه جالب..من تو این تاپیک هفته پیش یک پست گذاشتم ولی الان نیست چرا؟:shock:
دوم:فکر کنم از طریق بعضی توابع کار با فایل بتونین به پوشه temp دسترسی داشته باشید...البته مثل همیشه مطمئن نیستم..
از طرفی یک چیزای مبهمی یادمه که تو php.ini محل اپلود فایل رو مشخص میکرد..نمیتونین از اونجا عوضش کنین؟..
 

clove-pink

کاربر فعال
اطلاعات رو از طریق متد post به یه فایلی که با perl نوشته شده بود فرستادیم،و اون فایل رو ذره ذره توی مسیری که بهش دادیم،(نه حتما temp) می ریزیم .اسم و اندازه کلی فایلی که داره الان آپلود می شه رو داخل یه فایل دیگه ای به نام session ذخیره می کنیم.
حالا باید با استفاده از فایل session و اینکه اسم فایلی که الان داره آپلود می شه چیه ،اندازه اون فایل در حال آپلود رو می خونیم.
توی فلش یه Timer گذاشتم که این فایل رو صدا بزنه و اندازه آپلود شده رو بخونه .

این کد فایل upload.cgi که فایل رو دریافت می کنه و session رو می سازه:
کد:
#! /user/bin/perl -w

use strict;

use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI();

print "Content-type: text/html\n\n";

# Handle actions.
if ($q->param('action') eq "upload") {
# They just submitted the form and are sending a file.

my $filename = $q->param('file');
my $handle   = $q->upload('file');
$filename =~ s/(?:\\|\/)([^\\\/]+)$/$1/g;

# File size.

my $size = (-s $handle);

# This session ID would be randomly generated for real.
#my $sessid = 'my-session';
my $sessid =$filename;
# Create the session file.

open (CREATE, ">../sessions/$sessid") or die "can't create session: $!";
print CREATE "size=$size&file=$filename";
close (CREATE);

# Start receiving the file.

open (FILE, ">../files/$filename");
while (<$handle>) {
select(undef, undef, undef,0.001);
print FILE;
}
close (FILE);

# Delete the session.

unlink("../sessions/$sessid");

}
فایل دیگه ای به نام progreess.cgi که باید سایز فایل در حال آپلود رو بخونه و برگردونه و توی فلش با یه timer هی صداش می زنیم:
کد:
#! /user/bin/perl -w

use strict;

use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Fcntl qw(:flock);

print "Content-type: text/html\n\n";

my $q = new CGI();


if ($q->param('action') eq "progress") {
# They're checking up on their progress; get their sess ID.
my $sessid = $q->param('session') || 'my-session';
print $q->header(type => 'text/plain');

# Does it exist?

if (!-f "../sessions/$sessid") {

print "size=0&received=0&percent=0";
exit(0);
}

# Read it.

open (READ, "../sessions/$sessid");
my $line = <READ>;
close (READ);

# Get their file size and name.

my ($size,$name) = $line =~ /^size=(\d+)&file=(.+?)$/;

# How much was downloaded?

my $downloaded = -s "../files/$name";

# Calculate a percentage.
my $percent = 0;
if ($size > 0) {
$percent = ($downloaded / $size) * 100;
$percent =~ s/\.(\d)\d+$/.$1/g;
}

# Print some data for the JS.

print "size=$size&received=$downloaded&percent=$percent";
exit(0);
}
else {
die "unknown action";
}

البته استفاده از perl واسه آپلود زیاد جالب نیست چون پدر در آوره و فلش خودش filereference داره که می شه progressbar واسه آپلود ساخت اما من نمی خواستم فایل رو کاربر انتخاب کنه و از این روش برای آپلود با سایز کوچیک می شه استفاده کرد.
 
آخرین ویرایش:

clove-pink

کاربر فعال
با سلام..
اول یک چیزه جالب..من تو این تاپیک هفته پیش یک پست گذاشتم ولی الان نیست چرا؟:shock:
دوم:فکر کنم از طریق بعضی توابع کار با فایل بتونین به پوشه temp دسترسی داشته باشید...البته مثل همیشه مطمئن نیستم..
از طرفی یک چیزای مبهمی یادمه که تو php.ini محل اپلود فایل رو مشخص میکرد..نمیتونین از اونجا عوضش کنین؟..

شما درست می گین، من کلی در گیر این قضیه بودم و به هر دری (هر زبونی) رو آوردم یه پست تو انجمن Ajax گذاشته بودم شما اونجا جواب دادین.
 

جدیدترین ارسال ها

بالا