ããã§ããæ¯èŒç倧ããªãã¡ã€ã«ãããŠã³ããŒããããšããåé¡ãçºçããŸããã å
·äœçã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ç®¡çããã«ãã20ã40ã¡ã¬ãã€ãã®åç»ããµã€ãã«ã¢ããããŒãããããšèããŠããŸããã ç§ãã¡ã®è³¢æãªæ代ã«ã¯ãåããããªå€§ããã¯ãã®ãããªäºçŽ°ãªããšã§ãããããã«ã€ããŠè©±ãã®ã¯æ®å¿µã§ãã ããããçªç¶ããã¹ãŠãå
±æãã¹ãã£ã³ã°ã®èšå®ã«åããŸããã ã¢ããããŒãããããã¡ã€ã«ã®æ倧ãµã€ãºã2Mã§ããããã®æ°å€ãå€æŽããæ¹æ³ããªãããšãç¥ããç§ãã¡ã¯ãã£ãšããŸããã ãããŠãããã€ãã®çç±ã§ãã¹ãã£ã³ã°ãå€æŽããããšã¯ã§ããŸãã-å°ãªããšãä»ã¯ã
ç§ãã¡ã¯ãæ²æšãªå
±æãã¹ãã£ã³ã°ã®å¶éãåé¿ãããšãã課é¡ã«çŽé¢ããŠããŸãã ãã®ãããªãã€ãã¹ã®åçã¯æããã§ãããã¡ã€ã«ãæçã«åå²ããéšåã§åãããµãŒããŒåŽã§ãŸãšããå¿
èŠããããŸãã ããããããã¯æåã§è¡ãã¹ãã§ã¯ãããŸãã-ãŠãŒã¶ãŒã¯ãã¡ã€ã«ãéžæãããéä¿¡ããã¿ã³ãã¯ãªãã¯ããå¿
èŠããããŸãã ãããè¡ãæ¹æ³ïŒ
æåã®åå¿ã¯ãããŸããŸãªFlashã¢ããããŒããŒã®æ©èœã調ã¹ãããšã§ãã çµå±ã®ãšãããäžçã®æè¡çæèãããã¡ã€ã«ãéšåçã«ããŠã³ããŒããããããªæçšãªããšãå®çŸããŠããªããšããããšã¯ããããŸããã UploadifyãSWFUploadãFancyUploadãjqUploaderãjquery-transmitãã«ãŒãããŸãã ãããããã¹ãŠç¡é§ã§ãã ç®çã®æ©èœã衚瀺ãããŸããã ããã«æãäžããå¿
èŠãããå¯èœæ§ãé«ãã§ãããæéãäžè¶³ããŠããããã§ã«äœããããªããã°ãªããŸãã...
äžèšã¯æ²ããã§ãã ãã ããããã管çããã«ã§ãããšããäºå®ã¯ãç§ãã¡ã®æã«ããã£ãŠããŸãã ã€ãŸã ãã©ãŠã¶éã®äºææ§ã«ãŸã£ããçŠç¹ãåœãŠãå¿
èŠã¯ãããŸããã ãã®ã¡ã«ããºã ãã¯ã©ã€ã¢ã³ãã®ãã©ãŠã¶ã§åäœããããšã§ååã§ããããã¯ïŒå¥è·¡ã§ãïŒïŒFFã§ãã
FFã§ã¯ãææ°ããŒãžã§ã³ã§ã¯ããã¡ã€ã«ã¢ããããŒããã£ãŒã«ãã«ããŒãããããã¡ã€ã«ã®å
容ãæååã«å€æããæ©äŒãããããšãããã«æãåºããŸãã ãããŠããã®è¡ã现ããåããŠãAjaxã䜿çšããŠéšåçã«ã¢ããããŒãããããšãã欲æ±ã«ãªããŸãã
ã¯ã©ã€ã¢ã³ãéš
ãŸããå¿
èŠãªãã®ãéçHTMLã§æç»ããŸãã
<form> <input type="file" id="myfile"> </form> <a href="#" onClick="big_file_upload($('#myfile'))"></a>
ã€ãŸã ãªã³ã¯ãã¯ãªãã¯ãããšãbig_file_uploadé¢æ°ãåŒã³åºãå¿
èŠããããŸãããã®é¢æ°ã«ã¯ããã¡ã€ã«ã®ã³ã³ãã³ããååŸãããªããžã§ã¯ãã転éãããŸãã $ïŒ 'ïŒmyfile'ïŒã®æ§ç¯ã«æ³šæããŠãã ããã ãµãŒããŒã«ãã¡ã€ã«ã転éãããšãã«ajaxãªã¯ãšã¹ãã«ã䜿çšããjQueryã©ã€ãã©ãªãŒãæ¥ç¶ããå¿
èŠæ§ã«ã€ããŠè©³ãã説æããå¿
èŠã¯ãªããšæããŸãã
次ã«ãåãbig_file_uploadé¢æ°ãèšè¿°ããå¿
èŠããããŸãã
var upload_chunk_size = 120000;
//ãã®å€æ°ã«ã¯ããã¡ã€ã«ãåå²ããããŒã¹ã®ãµã€ãºãå«ãŸããŸãã
é¢æ°big_file_uploadïŒãã¡ã€ã«ïŒ{
// .....
}
ãã¡ã€ã«ã®å
容ãååŸãã
ãã¡ã€ã«ã®å
容ãååŸããã«ã¯ã次ã®æ§æã䜿çšããŸãã
var data = file.getïŒ0ïŒ.files.itemïŒ0ïŒ.getAsDataURLïŒïŒ;
ãã®æå³ã説æããŸãã
- file.getïŒ0ïŒ -é¢æ°ã«æž¡ãããjQueryãªããžã§ã¯ãããDOMãªããžã§ã¯ããååŸãã
- files.itemïŒ0ïŒ -ãªã¹ãããæåã®ãã¡ã€ã«ãååŸããŸãã ããã«ã¯1ã€ãããããŸãããã1ã€ã®ã³ã³ãããŒã«ããè€æ°ã®ãã¡ã€ã«ãã¢ããããŒãããå¯èœæ§ãããããšãæãåºãããŠãã ããã
- getAsDataURLïŒïŒ -ãã¡ã€ã«ã®ã³ã³ãã³ããDataïŒURL圢åŒã§ååŸããŸãã getAsTextããã³getAsBinaryã¡ãœããããããŸãããPOSTã¡ãœããã䜿çšããŠãµãŒããŒã«è»¢éããå¿
èŠããããããBase64ã§ãšã³ã³ãŒãããããã¡ã€ã«ã®ã³ã³ãã³ããååŸããããšããå§ãããŸãã
åæ§ã®æ§æã§ããã¡ã€ã«åãååŸããŸãã
var filename = file.getïŒ0ïŒ.files.itemïŒ0ïŒ.fileName;
ã³ã³ãã³ãã¯DataïŒURL圢åŒã§ãããããMIMEã¿ã€ããšãšã³ã³ãŒãæ¹åŒã«é¢ããæ
å ±ãå«ãããããŒéšåãåãæšãŠãããšããå§ãããŸãã é¢æ°ã®ããäžè¬çãªããŒãžã§ã³ã§ã¯ããã®æ
å ±ã䜿çšããå¿
èŠããããŸããããã®äŸã§ã¯ããã³ãŒãæã«ã®ã¿å¹²æžããŸãã ãããã£ãŠãããããŒãåºåãæåã®ã³ã³ãïŒãã¹ãŠãå«ãïŒã§ãã¹ãŠãåçŽã«ã«ããããŸãã
varã«ã³ã= data.indexOfïŒ 'ã'ïŒ;
ifïŒcomma> 0ïŒdata = data.substringïŒcomma + 1ïŒ;
ãã¡ã€ã«ããã£ã³ã¯ã§éä¿¡ãã
ããã§ã¯ãã¹ãŠãããããªãã®ã§ãã
var pos = 0;
whileïŒpos <data.lengthïŒ{
$ .postïŒ '/ upload.php'ã{
filenameïŒãã¡ã€ã«åã
ãã£ã³ã¯ïŒdata.substringïŒposãpos + upload_chunk_sizeïŒ
}ïŒ;
pos + = upload_chunk_size;
}
ãµãŒããŒåŽ
ããã§ããµãŒããŒã«PHPã¹ã¯ãªããupload.phpãåãå
¥ããããŸãã ããªã¢ã³ãã®äŸã§ã¯ãéåžžã«ç°¡åã§ãã
$ filename = $ _POST ['filename'];
$ f = fopenïŒ "/ dir / to / save / $ filename"ã "a"ïŒ;
fputsïŒ$ fãbase64_decodeïŒ$ _ POST ['chunk']ïŒïŒ;
fcloseïŒ$ fïŒ;
ãã¡ã€ã«ã¯ãªãã·ã§ã³ãaãã§éããŸãã æ¢åã®ãã¡ã€ã«ãäžæžãããã®ã§ã¯ãªããè£è¶³ããããšããå§ãããŸãã ãã®ããã«ããŠããã¡ã€ã«å
šäœãæçããçµã¿ç«ãŠãŸãã
ãã®ã¹ã¯ãªããã¯ãµã€ãã®éå
¬éã®ç®¡çè
éšåã«é
眮ããå¿
èŠãããããšã誰ããç解ããŠãããšæãã®ã§ãããŸããŸãªäººæ Œãã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã ããã«ããã¡ã€ã«åãšãã¡ã€ã«èªäœã®æå¹æ§ã確èªããå¿
èŠããããŸãã ããã§ãªããã°ãããã¯è匱æ§ã§ãããããŸãããããã...ç§ã¯ãã®ãããªèšèããç¥ããŸãã...
å®è¡ããŠã¿ãŠãã ãã
è©ŠããŸãããïŒ ããŸããããŸãããïŒ ç§ã¯ãããäºæ³ããããã®ãšã¯ãŸã£ããéã£ãŠãããšç¢ºä¿¡ããŠããŸãã ãã¡ã€ã«ãããŠã³ããŒããããããã§ãã é·ãããæ£ããããã§ãã ããããå
容ã¯ããçš®ã®æ··ä¹±ã§ãã
ãªããããèµ·ãã£ãã®ã§ããïŒ çãã¯ç°¡åã§ããPOSTèŠæ±ã¯äžåºŠã«è€æ°ã®éšåã§éåæã¢ãŒãã§éä¿¡ããããããéä¿¡ã³ãã³ããéä¿¡ãããæ£ç¢ºãªé åºã§ãµãŒããŒã«éä¿¡ãããããšã誰ãä¿èšŒããŸããã ããã ãã§ãªãã誰ãä¿èšŒããŸããããç§ã¯åœŒããæ£ããé åºã§æ¥ãããšã¯æ±ºããŠãªãããšãçŽæ¥ç¢ºèªããŸãã ãã€ããridgeã«ãªããŸãã
ãããã£ãŠãã©ããªã«æ²ãããŠããéåæãç¡å¹ã«ããå¿
èŠããããŸãã ãã¡ã€ã«ãéä¿¡ããåã«ã次ãå®è¡ããŸãã
$ .ajaxSetupïŒ{asyncïŒfalse}ïŒ;
ããã§ãã¹ãŠãæ£åžžã«ãªããŸããã ãã ãããã¡ã€ã«ã¯ç®çã®é åºã§åéãããŸãããä»ã®ã¹ã¯ãªããã®ããŠã³ããŒãã¯äžæåæ¢ãããŸãã ãããã£ãŠããŠãŒã¶ãŒã«è¿·æããããªãããã«ããã«ã¯ãããŒã»ã³ããŒãžãŸãã¯é²è¡ç¶æ³ããŒãã©ããã«è¡šç€ºãããšããã§ãããã ãããã£ãŠãå®è¡å¯èœãªã¹ã¯ãªããã¯æ¬¡ã®ããã«ãªããŸãã
var upload_chunk_size = 120000; //ãã£ã³ã¯ãµã€ãº
é¢æ°big_file_uploadïŒãã¡ã€ã«ïŒ{
var data = file.getïŒ0ïŒ.files.itemïŒ0ïŒ.getAsDataURLïŒïŒ; //ãã¡ã€ã«ã®å
容ãååŸããŸã
var filename = file.getïŒ0ïŒ.files.itemïŒ0ïŒ.fileName; //ãã¡ã€ã«åãååŸããŸã
varã«ã³ã= data.indexOfïŒ 'ã'ïŒ;
ifïŒcomma> 0ïŒdata = data.substringïŒcomma + 1ïŒ; //ããããŒããŒã¿ãåãåããŸã:: URL
var pos = 0;
$ .ajaxSetupïŒ{asyncïŒfalse}ïŒ; //éåæããªãã«ããŸã
whileïŒpos <data.lengthïŒ{
$ .postïŒ '/ upload.php'ã{// Send POST
filenameïŒfilenameã//ãã¡ã€ã«å
ãã£ã³ã¯ïŒdata.substringïŒposãpos + upload_chunk_sizeïŒ//ãã¡ã€ã«ã®äžéš
}ïŒ;
pos + = upload_chunk_size;
var p = Math.roundïŒpos * 100 / data.lengthïŒ; //éä¿¡ããå²åãèšç®ããŸã
$ïŒ 'ïŒprogress'ïŒãtextïŒp + 'ïŒ
'ïŒ; //ãŠãŒã¶ãŒã®å®å¿ã®ããã«ããžã¿ã«ãæç»ããŸã
}
}
çæ
ããããªãã§...
- ãã®äŸã§ã¯ãgetAsDataURLã¡ãœãããåžžã«base64ãšã³ã³ãŒãããŒã¿ãè¿ãããšãåæãšããŠããŸãã å®éãåžžã«ãããªããšã¯æããªãã è¯ãæ¹æ³ã§ã¯ãããããŒãæšãŠãã®ã§ã¯ãªãããµãŒããŒåŽã«è»¢éããå¿
èŠããããŸãããµãŒããŒåŽã¯ãããŸããŸãªæ¹æ³ã§ãšã³ã³ãŒããããããŒã¿ãåŠçããããã«æããããŸãã
- 2åéä¿¡ããããã¡ã€ã«ã¯ããµãŒããŒã«2åèšé²ãããŸãã ãããŠããã¯ããèªèº«ãè£å®ããŸãã ãããåé¿ããã«ã¯ãæããã«ãååã«å ããŠãããŠã³ããŒãçšã®ä»ã®äžæã®èå¥åãæž¡ãå¿
èŠããããŸãã ããããããã¯ãäžè¬çã«èšãã°ããã¡ã€ã«åãçæããã³éä¿¡ããæ¹æ³ã®åé¡ã§ãã ããã«æ®éçãªã¬ã·ãã¯ãããŸããã
- ã¯ã©ã€ã¢ã³ãã¹ã¯ãªããã¯ïŒãã¡ã€ã«ãµã€ãºãšãã£ãã«ã®åãã«å¿ããŠïŒé·æéå®è¡ãããFFãå°ããããšãããããããããŸããã
- ãã©ãŠã¶ãŒéã®äºææ§ã æ²ããããªããã¡ã€ã«ã®å
容ã®ååŸã¯FFã§ã®ã¿æ©èœããŸãã 3.0ã3.5ãããã³3.6ã§ãã¹ãæžã¿ã 以åã¯ãæå
ã«ãããããªãããšã¯ç¢ºèªãããŠããŸããã§ããã FFéçºè
èªèº«ã代ããã«FileAPIã䜿çšããæ¹æ³ãæšå¥šããŠããŸããã3.6ã§ããç»å ŽããŸããã§ããã
- æ¬åœã«å€§ããªãã¡ã€ã«ïŒæ°çŸã¡ã¬ãã€ããã®ã¬ãã€ãïŒã¯ãã®æ¹æ³ã§ã¯ããŠã³ããŒãã§ããŸããã å¶éã¯ããã©ãŠã¶ã§äœ¿çšå¯èœãªã¡ã¢ãªã®éã«ãã£ãŠç°ãªããŸãã
ã©ãããïŒ
ãããããéåæã¢ãŒãã§ãåãããšãè©ŠããŠãã ããã åããŒã¹ã«ã€ããŠããã¡ã€ã«å
ã®ãã®å Žæã«é¢ããæ
å ±ãéä¿¡ããŸãã åæã«ããµãŒããŒåŽã¯éåžžã«è€éã«ãªããŸãã