DelphiとPHP
昨日の記事で思ったよりも検索で飛んでくる方がいました。
このような事をやりたい人は沢山いるんですね。それではということで具体的なコードを書いておきます。
用意するのはサーバー側へ PHPと /dataフォルダ。Delphiではボタン1個とオープンダイアログ1個です。
そして、Indyコンポーネントが必要で、usesするのは以下の pasファイル。
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdMultipartFormData;
具体的なコードは以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | Delphi procedure TForm1.Button1Click(Sender: TObject); const UpURL = 'http://xxxxxx.com/test/upfile.php'; var ResStream: TMemoryStream; MpfDataStream: TIdMultiPartFormDataStream; IdHTTP : TIdHTTP; begin if OpenDialog1.Execute then begin MpfDataStream := TidMultiPartFormDataStream.Create; ResStream := TMemoryStream.Create; IdHTTP := TIdHTTP.Create; try IdHttp.Request.ContentType := MpfDataStream.RequestContentType; MpfDataStream.AddFile('userfile', OpenDialog1.FileName, 'multipart/form-data'); MpfDataStream.AddFormField('send', 'send'); MpfDataStream.Position := 0; IdHTTP.Post(UpURL, MpfDataStream, ResStream); finally IdHTTP.Free; MpfDataStream.Free; ResStream.Free; end; end; end; サーバーに設置する PHP (upfile.php) <?php $upload_dir = './data'; $maxfilesize = 102400000; // up to 100MB $send = $_POST['send']; $userfile = $_FILES['userfile']; $phpself = $_SERVER['PHP_SELF']; if(isset($send)) { if(is_uploaded_file($userfile['tmp_name'])) { if($userfile['size'] <= $maxfilesize) { if (move_uploaded_file($userfile['tmp_name'], $upload_dir.'/'.$userfile['name'])) { echo '<p>upload ok</p>'; } else { echo '<p>upload error</p>'; } } } } ?> <form action="<?php echo $phpself; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize; ?>"> <input type="file" name="userfile"> <input type="submit" name="send" value="send"> </form> |
どうぞ試してみてください。