8/20 ブラウザからアップした音声ファイルをPythonで処理①
読んで字の如く。
備忘録なので、まっさらな状態から再現できるように書く。
長くなりそうなので小分けして。
被アップ側のPCの準備
①ルータ設定(PPPoE接続になっていることを確認)
コマンドラインから、>ipconfigでデフォルトゲートウェイのIPを確認。(192.168.x.x)
→ブラウザを立ち上げてurlにデフォルトゲートウェイのIPを入れる。
→WANの設定がPPPoE接続になっているか確認。
②ポートを解放
80番ポートを対象にポートフォワーディング(①のルータ設定の画面で行う)の設定をする。
ポートフォワーディング=グローバルIPへのアクセスをローカルIPへ繋ぐ
③サーバーを立てる
Apacheをインストールして実行。
ファイルをサーバーへアップするにはphpを使うので、インストールして、Apacheで実行できるようにhttpd.confに以下の文章を追加。
LoadModule php_module "C:/PHP/php8apache2_4.dll"※
<FilesMatch "\.php$">
AddHandler php-script .php .html※
AddType application/x-httpd-php .php .html
</FilesMatch>
PHPIniDir "C:/PHP"※
※1.ダウンロードしたPHPのディレクトリ内の当該ファイルへのパスを入れる。
※2.この記述だと拡張子が.htmlのファイルでもphpが実行できる。
※3.参照するphp.iniまでのパスを入れるが、あらかじめphp.iniを作っておく必要がある。
音声ファイルのような大きいサイズのファイルをアップできるようにphp.iniの以下の値を書き換える。
- upload_max_filesize=100M
- post_max_size=100M
- memory_limit=124M
またPythonを実行できるように以下の設定も追加
<Directory "${SRVROOT}/cgi-bin">
AllowOverride None
AddHandler cgi-script .py
Options +ExecCGI
Require all granted
</Directory>
SRVROOTの設定もしておく
Define SRVROOT "C:\Apache\Apache24"
ServerRoot "${SRVROOT}"
また環境変数を参照するPythonスクリプトの実行時にエラーが起きるので以下の一文も追加。
SetEnv USERPROFILE C:\Users\(Administrator)←環境変数で参照するユーザー名
②に続く
8/9
//XMLHttpRequestとfetchを覚えたので自分用に。 //<input type='submit'>だと画面遷移するので、画面そのままでphpにデータを渡す為に覚えた。 //例えばファイルのアップなら以下のようにする。
submit.html
<html>
<form id='form1' method='POST' enctype='multipart/form-data'>
<div><input type='file' name='file_name'></div> <div><input type='button' onclick='submit_func()'></div>
</form>
</html>
<script>
var xhr = new XMLHttpRequest();
function submit_func(){ var form1 = new FormData(document.getElementById('form1')); xhr.open('POST','recept.php'); xhr.send(form1); }
</script>
recept.php
<?php
$tmpPath = $_FILES["file_name"]["tmp_name"];
$savePath = 'C:/アップ先パス/' . basename($_FILES["file_name"]["name"]); move_uploaded_file($tmpPath , $savePath);
?>
//fetchだともっと記述が少ない。で、phpから値を返せる。
var form1 = new FormData(document.getElementById('form1'));
fetch('recept.php', { method: 'POST', body: form1 }) .then(response => response.json()).then(res => { alert(res); }); }
<?php
$tmpPath = $_FILES["file_name"]["tmp_name"];
$savePath = 'C:/Apache/Apache24/htdocs/glob/' . basename($_FILES["file_name"]["name"]);
move_uploaded_file($tmpPath , $savePath);
$count = 0;
while($count<100){ sleep(1);
if(file_exists($savePath)){ break; }
$count++; }
echo json_encode($res = 'OK');
?>
以上。