Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Загрузчик файлов с прелоадером (http://www.flasher.ru/forum/showthread.php?t=146240)

LiStopaD 01.11.2010 23:23

Загрузчик файлов с прелоадером
 
Всем доброго времени суток, форумчане! Подскажите, пожалуйста, как сделать загрузчик файлов с прелоадером. Как например на яндекс народе, когда загружаешь файлы на сервак.

mooncar 02.11.2010 10:42

Если нужен аплоадер, смотрите в хелпе примеры для класса FileReference.
Если при этом нужен индикатор прогресса, используйте событие onProgress (в примере есть).

LiStopaD 10.01.2011 00:35

Посмотрел в хелпе пример. У меня пока возник вопрос по этой строке кода
Код AS1/AS2:

if(!file.upload("http://www.yourdomain.com/yourUploadHandlerScript.cfm")) {
        trace("Upload dialog failed to open.");
    }

Можете разъяснить какокого вида должен быть файл на стороне сервака?

mooncar 10.01.2011 00:56

1. Почитайте, например это, пропуская все про форму*, и начиная с суперглобального массива $_FILES.

2. Разновидности принимающего скрипта зависят от того, что делать с залитым файлом.
3. Например, скрипт с рабочего проекта
PHP код:

<?php
$stend 
= $_GET['stend'];
$folder = '../../catalogdata/items/fotomain/';

if(isset(
$_FILES['file']) && $_FILES['file']['error']===0)
{
    
copy($_FILES['file']['tmp_name'], $folder.'/'.$stend.'.jpg');
}
?>

Тут, помимо файла, принимаются еще доп. GET-данные в переменную $stend (чтобы узнать, куда копировать после принятия).
И далее, помещаем полученный файл в директорию $folder, задавая ему имя $stend.

Или
PHP код:

<?php
$stend 
= $_GET['stend'];
$folder = '../../catalogdata/items/foto/';

if(isset(
$_FILES['file']) && $_FILES['file']['error']===0)
{
    
$fullfolder = $folder.$stend;
    if (!
opendir($fullfolder)) 
    {
        
mkdir($folder.$stend, 0770);
    }
    
copy($_FILES['file']['tmp_name'], $fullfolder.'/temp.jpg');
}
?>

А тут предварительно проверяем, есть ли некая директория. Если нет, создаем, и помещаем туда полученный файл под именем temp.jpg.

Но это частные случаи, просто под рукой были. Вообще, иногда сохраняют исходное имя полученного файла, когда копируют из временного файла (т.е. того, в который сервер изначально получает файл - нечто с неудобоваримым названием и во временной директории хостинга) в файл с "родным" именем и куда нужно.
Т.е. все зависит от (2).
----------
* Аплоадеры на флеше "втихую" используются во всякого рода CMS-ках, так как флеш позволяет заливать на сервер файлы, минуя перезагрузку страницы, что требуется, если заливать на сервер файл с помощью HTML-формы.

PS. Вопрос вообще-то не в эту ветку, если будут дальнейшие вопросы, то лучше создать нужную тему в "Серверных технологиях".

LiStopaD 10.01.2011 02:04

Спасибо большое! Буду пробовать.

Добавлено через 68 часов 14 минут
Блин, что-то не хочет работать:(
Вот код кода во флеше (все из хелпа взял)
Код AS1/AS2:

import flash.net.FileReferenceList;
import flash.net.FileReference;
 
var listener:Object = new Object();
 
listener.onSelect = function(fileRefList:FileReferenceList) {
    //trace("onSelect");
    var list:Array = fileRefList.fileList;
    var item:FileReference;
    for(var i:Number = 0; i < list.length; i++) {
        item = list[i];
        //trace("name: " + item.name);
        //trace(item.addListener(this));
        item.upload("http://www.wer.ru/saveFile.php");
    }
}
 
listener.onCancel = function():Void {
    //trace("onCancel");
}
 
listener.onOpen = function(file:FileReference):Void {
    //trace("onOpen: " + file.name);
}
 
listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
    //trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);
}
 
listener.onComplete = function(file:FileReference):Void {
    //trace("onComplete: " + file.name);
        qwer = "dduud";
 
}
 
listener.onHTTPError = function(file:FileReference, httpError:Number):Void {
    //trace("onHTTPError: " + file.name + " httpError: " + httpError);
}
 
listener.onIOError = function(file:FileReference):Void {
    //trace("onIOError: " + file.name);
}
 
listener.onSecurityError = function(file:FileReference, errorString:String):Void {
    //trace("onSecurityError: " + file.name + " errorString: " + errorString);
}
 
var fileRef:FileReferenceList = new FileReferenceList();
fileRef.addListener(listener);
fileRef.browse();

Вот код на пхп
PHP код:

<?php 
$stend 
= $_GET['name']; 
//$folder = ''; 

if(isset($_FILES['file']) && $_FILES['file']['error']===0) 
{ 
    
copy($_FILES['file']['tmp_name'], $stend.'.jpg'); 
} 
echo 
$stend;
?>

Работаю с локальным серваком. Вставил флешку в страницу, гружу ее и никакого ответа... Флешка не запускается, а при тестировании ролика во флеше окно загрузки работает нормально. В чем косяк может быть?

Добавлено через 68 часов 27 минут
Поставил обработчик события, флешка открывает окно загрузки, а пхп не хватает почему-то файлы.

JeStas 04.04.2011 14:09

1.Как вы определили, хватает php файлы или нет?
2.В том же help.adobe.com написано, что по умолчанию в массив $_GET (или $_POST) файл FileReference.upload() передает в переменную $_REQUEST['Filedata'], ели вы не задаете его во втором параметре вызова функции unload...
3.Зачем echo - вы все равно не отлавливаете ответ от сервера?
Я использую следующий скрипт (самописный):
PHP код:

$file_name = md5(uniqid(mt_rand(), true)); //Генерируем имя файла
function imageresize ($outfile,$infile,$new_max,$quality) //Функция изменения геометрических размеров картинки 
    
{
        
$img = getimagesize ($infile);
        
$w_img = $img[0];
        
$h_img = $img[1];
        
$index_img = $w_img/$h_img;
        if (
$index_img > 1) {$neww = $new_max;
                            
$newh = $new_max/$index_img;}
            elseif (
$index_img < 1) {$newh = $new_max;
                                    
$neww = $new_max*$index_img;}
                    else {
$newh = $new_max;
                            
$newh = $new_max;} 
        switch(
$img[2]) {
        case 
1:
        
$im = imagecreatefromgif($infile);
        break;
        case 
2:
        
$im = imagecreatefromjpeg($infile);
        break;
        default: 
$im = imagecreatefrompng($infile);
        break;}

    
$im_tmp = imagecreatetruecolor($neww,$newh);
    
imagecopyresampled($im_tmp,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
    
imagejpeg($im_tmp,$outfile,$quality);
    
imagedestroy($im);
    
imagedestroy($im_tmp);
    }
    
$uploaddir_tmp =_IMAGE_TMP_; //Временная папка
      
$uploaddir = _IMAGE_LOAD_; //папка для хранения картинок
      
$uploaddir_thm =_IMAGE_LOAD_TMB_; //папка для хранения их уменьшенных изображений "тумбалсов"
    
$ext = strtolower(array_pop(explode(".", $_FILES['Filedata']['name']))); //Хватаем расширение
    
$uploadfile_tmp = $uploaddir_tmp .$file_name.".".$ext;  //полное имя временного файла"
     
$uploadfile = $uploaddir .$file_name.".".$ext; //полное имя файла картинки
      
$uploadfile_thm = $uploaddir_thm .$file_name.".".$ext; //полное имя файла  "тумбалса"
    
    

  
if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadfile_tmp)) {
      
imageresize($uploadfile,$uploadfile_tmp,_IMAGE_MAX_SIZE_,_IMAGE_QUALITY_); //формирование картинки
      
imageresize($uploadfile_thm,$uploadfile_tmp,_IMAGE_TMB_MAX_SIZE_,_IMAGE_QUALITY_); //формирование  "тумбалса"
   
SaveImage($file_name.".".$ext, $image_mode);
  } else {
   echo 
"File uploading failed.\n";  //на всякий пожарный!!! для тестирования из php и перехвата через URLRequest
  
} 


LiStopaD 05.04.2011 12:10

Все, заработало. Файл сохраняется. Спасибо!! Теперь пытаюсь замктить фильтр на открываемые файлы и датчик на загрузку файла)))


Часовой пояс GMT +4, время: 00:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.