Autor | Zpráva | ||
---|---|---|---|
Babovicka Profil * |
#1 · Zasláno: 18. 6. 2010, 14:39:06
Dobrý den,
chystám menší změny na svém imagehostingu a hledám nejlepší možné řešení v podobě uploaderu a to v Ajaxu nebo ve Flashi. Našel jsem plupload.com, ovšem rád bych věděl i o jiném řešení. Děkuji |
||
H13 Profil |
#2 · Zasláno: 18. 6. 2010, 15:09:39 · Upravil/a: H13
Měl jsem podobný problém, plupload je asi nejlepší řešení.
Jsou tam nějaký problémy: - ne moc dobrá dokumentace ohledně serverový části zpracování uploadu - trochu problém např. při reloadovaní stránky po úspěšném nebo neúspěšném uploadování souborů (hlavně v případě použítí chunk metody) - např. v případě použití chunk, je potřeba kromě jednoho tmp souboru vytovřit i druhý pro různé kontroly na straně serveru (velikost, ...) Jinak jsem testoval všechny metody (html4, html5, flash, browserplus, silverlight, gears) a vše kromě silverlightu v IE jelo bez problémů. Silverlight v IE mi občas "zamrzl" Plupload jel bez problémů v JQuery (s Mootools bohužel ne :-( ). Takže ho doporučuju (já osobně nic podobného na takové úrovni nenašel) |
||
Babovicka Profil * |
#3 · Zasláno: 18. 6. 2010, 15:55:19
Dobře díky,
ještě dotaz, nahrané soubory se mi ukládají s koncovkou .tmp a já potřebuji klasickou koncovku se kterou to uživatel nahrával :). |
||
H13 Profil |
#4 · Zasláno: 19. 6. 2010, 00:49:49
No to už záleží na tom jakej použiješ php script pro upload souboru - ten tmp soubor má být přesunut jako hlavní soubor (teď nejsem na mým počítači, takže ti neřeknu přímo php funkci, která to zajístí :-( )
|
||
Babovicka Profil * |
#5 · Zasláno: 19. 6. 2010, 18:24:02
<?php /** * upload.php * * Copyright 2009, Moxiecode Systems AB * Released under GPL License. * * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing */ // HTTP headers for no cache etc header('Content-type: text/plain; charset=UTF-8'); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // Settings $targetDir = "uploads"; $cleanupTargetDir = false; // Remove old files $maxFileAge = 60 * 60; // Temp file age in seconds // 5 minutes execution time @set_time_limit(5 * 60); // usleep(5000); // Get parameters $chunk = isset($_REQUEST["chunk"]) ? $_REQUEST["chunk"] : 0; $chunks = isset($_REQUEST["chunks"]) ? $_REQUEST["chunks"] : 0; $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; // Clean the fileName for security reasons $fileName = preg_replace('/[^\w\._]+/', '', $fileName); // Create target dir if (!file_exists($targetDir)) @mkdir($targetDir); // Remove old temp files if (is_dir($targetDir) && ($dir = opendir($targetDir))) { while (($file = readdir($dir)) !== false) { $filePath = $targetDir . DIRECTORY_SEPARATOR . $file; // Remove temp files if they are older than the max age if (preg_match('/\\.tmp$/', $file) && (filemtime($filePath) < time() - $maxFileAge)) @unlink($filePath); } closedir($dir); } else die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}'); // Look for the content type header if (isset($_SERVER["HTTP_CONTENT_TYPE"])) $contentType = $_SERVER["HTTP_CONTENT_TYPE"]; if (isset($_SERVER["CONTENT_TYPE"])) $contentType = $_SERVER["CONTENT_TYPE"]; if (strpos($contentType, "multipart") !== false) { if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) { // Open temp file $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen($_FILES['file']['tmp_name'], "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); fclose($out); unlink($_FILES['file']['tmp_name']); } else die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } else die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); } else { // Open temp file $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen("php://input", "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); fclose($out); } else die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } // Return JSON-RPC response die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); ?> Toto je originální, neupravený script, které vše zpracovává, já jen potřebuji aby uploadovaný soubor se uložil do složky uploads a nebyl nijakl upravovaný. Třeba nechápu proč se to ukládá s koncovkou .tmp :). |
||
Davex Profil |
#6 · Zasláno: 19. 6. 2010, 22:59:18 · Upravil/a: Davex
Za řádky č. 76 a 95 bych dal přejmenování souboru na původní název
rename($targetDir . DIRECTORY_SEPARATOR . $fileName, $targetDir . DIRECTORY_SEPARATOR . $_FILES['file']['name']); Edit: To je vlastně nesmysl, protože se to musí přejmenovat až po dokončení uploadu všech částí. Tak nic. Proměnnou $_FILES['file']['name'] by ale ještě bylo dobré zkontrolovat, zda obsahuje platné jméno. Edit2: Ukázka použití plupload nahraje soubory bez přípony .tmp, takže postupuj podle ní. |
||
Časová prodleva: 3 dny
|
|||
H13 Profil |
#7 · Zasláno: 23. 6. 2010, 09:54:31
Davex
Proměnnou $_FILES['file']['name'] by ale ještě bylo dobré zkontrolovat, zda obsahuje platné jméno. Ten skript je pouze demo a vůbec neobsahuje kontrolu (podle autora), to znamená, že by neměl být vůbec použit v takovémhle "syrovém stavu" Babovicka Při použití chunk metody v podstatě nedocházi k uploadu souboru, ale k tomu, že se na serveru vytvoří soubor a ten se otevírá, zapisuje se do něj postupně a nakonec se zavře. Já jsem si vytvořil ještě jeden dočasnej soubor, v momentě, kdy je naplněnej (poslední chunk), se pomocí php copy funkce zkopíruje na požadované místo a dočasný soubor se smaže. Pokud není použitá chunk metoda, pak stačí jednoduchá funkce: move_uploaded_file |
||
Časová prodleva: 8 dní
|
|||
MartinR Profil |
#8 · Zasláno: 30. 6. 2010, 22:34:53
Také se snažím rozjet plupoload, ale na lokálním serveru vše bez problému, ale na produkčním uploaduje jen malé obrázky-dokumenty cca do 100KB. Neví někdo v čem by mohl být zakopaný pes?
|
||
Časová prodleva: 14 let
|
0