もう定番化しているかも知れないけど ajaxに対応したファイルアップロード
インラインフレームを使用すると簡単に出来ます。
まずはアップロードするほうのHTMLファイルは以下のとおり!
<html>
<head>
<!-- Javascript mootools -->
<script type="text/javascript" src="mootools/core.js"></script>
<script type="text/javascript" src="mootools/more.js"></script>
<script type="text/javascript">
function GetFile(fname, fsize){
if(fname){
$("show").innerHTML ="ファイル名:"+fname+"<br />ファイルサイズ:"+fsize+"バイト<br />";
}
}
window.addEvent('domready', function(ev){
$('now').innerHTML = (new Date).toString();
$('fileup_link').addEvent('click',function(event){
event.stop();
var control = $("craft_fileupload_field");
if(control && control.focus){
$("show").innerHTML += "fire! ";
}
});
var fform = $('craft_fileupload_form');
$('craft_upload_file').addEvent('change',function(event){
fform.submit();
});
$('fileup_link').addEvent('click',function(event){
event.stop();
$('craft_upload_file').click();
});
});
</script>
</head>
<body>
<div id="now"></div>
<div>
<a id="fileup_link" href="craft/upload/field_name">ファイルアップロード</a>
</div>
<div id="show"></div>
<hr />
<form id="craft_fileupload_form" onsubmit="return false"
enctype="multipart/form-data" method="post"
target="craft_fileupload_iframe" accept-charset="utf-8" action="./fileupload_iframe.php">
<input type="file" id="craft_upload_file" name="uploadfile" />
</form>
<iframe src="./fileupload_iframe.php" name="craft_fileupload_iframe" style="width:500px;height:100px;">
</iframe>
</body>
</html>
インラインフレームのPHPファイルは次のとおり
<?php
/* ファイルを取得するPHPの何らかの処理 省略します!*/
$file_exists = (bool)ファイルを取得できたかどうが
?><html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<script type="text/javascript">
function setInfo(){
<?php if($file_exists): ?>
window.parent.GetFile('<?php echo $fname; ?>', <?php echo $fsize; ?>);
<?php else: ?>
window.parent.GetFile();
<?php endif;?>
document.getElementById('time').innerHTML = (new Date).toString();
}
</script>
</head>
<body onload="setInfo();">
<?php
if($file_exists){
echo 'ファイルをアップロードしました';
}else{
echo 'ファイルをアップロードできませんでした';
}
?>
<div id="time"></div>
</body>
</html>
リンクをクリックするとファイルを選択するダイアログが出ます。
選択するとすぐにアップロード!
その結果を親フレームに通知します。
インラインフレームを使用すると簡単に出来ます。
まずはアップロードするほうのHTMLファイルは以下のとおり!
<html>
<head>
<!-- Javascript mootools -->
<script type="text/javascript" src="mootools/core.js"></script>
<script type="text/javascript" src="mootools/more.js"></script>
<script type="text/javascript">
function GetFile(fname, fsize){
if(fname){
$("show").innerHTML ="ファイル名:"+fname+"<br />ファイルサイズ:"+fsize+"バイト<br />";
}
}
window.addEvent('domready', function(ev){
$('now').innerHTML = (new Date).toString();
$('fileup_link').addEvent('click',function(event){
event.stop();
var control = $("craft_fileupload_field");
if(control && control.focus){
$("show").innerHTML += "fire! ";
}
});
var fform = $('craft_fileupload_form');
$('craft_upload_file').addEvent('change',function(event){
fform.submit();
});
$('fileup_link').addEvent('click',function(event){
event.stop();
$('craft_upload_file').click();
});
});
</script>
</head>
<body>
<div id="now"></div>
<div>
<a id="fileup_link" href="craft/upload/field_name">ファイルアップロード</a>
</div>
<div id="show"></div>
<hr />
<form id="craft_fileupload_form" onsubmit="return false"
enctype="multipart/form-data" method="post"
target="craft_fileupload_iframe" accept-charset="utf-8" action="./fileupload_iframe.php">
<input type="file" id="craft_upload_file" name="uploadfile" />
</form>
<iframe src="./fileupload_iframe.php" name="craft_fileupload_iframe" style="width:500px;height:100px;">
</iframe>
</body>
</html>
インラインフレームのPHPファイルは次のとおり
<?php
/* ファイルを取得するPHPの何らかの処理 省略します!*/
$file_exists = (bool)ファイルを取得できたかどうが
?><html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<script type="text/javascript">
function setInfo(){
<?php if($file_exists): ?>
window.parent.GetFile('<?php echo $fname; ?>', <?php echo $fsize; ?>);
<?php else: ?>
window.parent.GetFile();
<?php endif;?>
document.getElementById('time').innerHTML = (new Date).toString();
}
</script>
</head>
<body onload="setInfo();">
<?php
if($file_exists){
echo 'ファイルをアップロードしました';
}else{
echo 'ファイルをアップロードできませんでした';
}
?>
<div id="time"></div>
</body>
</html>
リンクをクリックするとファイルを選択するダイアログが出ます。
選択するとすぐにアップロード!
その結果を親フレームに通知します。