WEBプログラム色々

  • 小ネタ、ちょっとした確認

AjaxとPerlCGIを利用したファイルアップロード&保存のテスト

2020-08-03

  • 環境
    • Ubuntu 18.04
    • Apache2: 2.4.29
    • Perl: v5.26.1
  • upload.html [644]
    <html>
     
    <!--
    ----------------------------------------------------------------------------
        AjaxとPerlCGIを利用したファイルアップロード&保存のテスト
     
        2020-08-03
    ----------------------------------------------------------------------------
     
    参考
      https://qiita.com/yasumodev/items/cffb735f46ffd489a4db
     
    ディレクトリ構成例
      public_html  /  upload.html [644] (このファイル)
           |          upload.cgi  [755]
          save     /              [777] アップロードファイル保存用ディレクトリ 
    -->
     
    <body>
    <script
    	src="https://code.jquery.com/jquery-3.5.1.js"
    	integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
    	crossorigin="anonymous"></script>
     
     
    <form id="my_form">
    	<input type="file" name="file_1">
    	<button type="button" onclick="file_upload()">upload</button>
    </form>
     
    <div id="result"></div>
     
    <script>
     
    function file_upload()
    {
    	// 結果の表示をリセット
    	$("#result").html("");
     
    	// フォームデータを取得
    	var formdata = new FormData($('#my_form').get(0));
     
    	// POSTでアップロード
    	$.ajax({
    		url  : "./upload.cgi",
    		type : "POST",
    		data : formdata,
    		cache       : false,
    		contentType : false,
    		processData : false,
    		dataType    : "html"
    	})
    	.done(function(data, textStatus, jqXHR){
    		//alert(data);
    		$("#result").html(data);
    	})
    	.fail(function(jqXHR, textStatus, errorThrown){
    		alert("fail");
    	});
    }
     
    </script>
    </body>
    </html>


  • upload.cgi [755]
    #!/usr/bin/perl
     
    # 参考
    # 
    # http://www.searchai.jp/lesson/perl.php?page=17
     
    use CGI;
    $query = new CGI;
     
    $filename = $query->param('file_1');
    while($bytesread = read($filename, $buffer, 2048)) {
      $file .= $buffer;
    }
     
    open(OUT, "> ./save/$filename") or die("error: $filename :$!");
    binmode(OUT);
    print(OUT $file);
    close(OUT);
    chmod 0666, "./save/$filename";
     
     
    print "Content-type: text/html\n\n";
    print "done: $filename → ";
    print "<a href='./save/$filename' target='_blank'>View</a>";