データ送信 htm , php
html で複数のファイルを指定,php でそれを move_upload_file .
up_data.htm
<form enctype="multipart/form-data" action="up_data.php" method="POST">
upload file:<br/>
<input name="file_1" type="file" /><br/>
<input name="file_2" type="file" /><br/>
<input type="submit" value="send" />
</form>
up_data.php
<?php
if (!file_exists("./data")) {
mkdir("./data") ;
}
foreach ($_FILES as $keys => $values) {
$file_e = $values ;
$tempfile = $file_e[‘tmp_name’] ;
$filename = ‘./data/’ . $file_e[‘name’] ;
if (is_uploaded_file($tempfile)) {
move_uploaded_file($tempfile,$filename) ;
}
}
$scan_f = scandir("./data") ;
foreach ($scan_f as $key => $value) {
echo $value . "<br/>\r\n" ;
}
?>
データ送信 CHttpFile
送信するデータの中身をどの様に指定するかわかってないので,CHttpFile でもう一度やり直し.
MSDN CHttpFile クラスにあるサンプルのコードで,前回と同様にデータが送れることは確認.
content.txt を用意して,あればそれを読込んで送る様に変更.
CString strData = _T(“Some very long data to be POSTed here!”);
{
CString dataFile = _T(“./content3.txt”) ;
if (::File_IsExist(dataFile)) {
strData = ::LoadText(dataFile).c_str() ;
}
}
Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryHQUnqULNgae5Y5HW
——WebKitFormBoundaryHQUnqULNgae5Y5HW
Content-Disposition: form-data; name=”file_imo”; filename=”up_Cube.imo”
Content-Type: application/octet-stream
v 0 0 -5
v 0 0 0
v 0 5 0
v 0 5 -5
v 5 0 -5
v 5 5 -5
v 5 0 0
v 5 5 0
f 1 2 3 4
f 5 1 4 6
f 7 5 6 8
f 2 7 8 3
f 3 8 6 4
f 2 1 5 7
——WebKitFormBoundaryHQUnqULNgae5Y5HW
Content-Disposition: form-data; name=”file_htm”; filename=”up_Cube.htm”
Content-Type: application/octet-stream
<!DOCTYPE html>
<html lang=”ja” >
<head >
<meta charset=”UTF-8″ />
< script src=”/_lib/js/webgl/threejs/r84/build/three.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/Detector.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/controls/OrbitControls.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/loaders/MTLLoader.js”> </script>
< script src=”/_lib/js/i_lib/threejs/r84/IMOLoader.js”> </script>
< script src=”/_lib/js/i_lib/threejs/r84/c_3js_4.js”> </script>
< script src=”/_lib/js/i_lib/2017.03/filePath.js”> </script>
</head>
<body>
var imoFile=’up_Cube.imo’;
ThreeStart3 (imoFile,5,5,5) ;
</body>
</html>
——WebKitFormBoundaryHQUnqULNgae5Y5HW–
データは送られているが,PHP の $_FILES にうまく設定されていない.
$str = var_export($_FILES,true) ;
ヘッダ部分の指定が間違っていたみたいで,
CString strHead ;
{
CString dataFile = _T(“./content3.txt”) ;
if (::File_IsExist(dataFile)) {
strData = ::LoadText(dataFile).c_str() ;
{
v_tstring strAry = ::String_SplitLine(strData) ;
if (strAry.size() > 0) {
strHead = strAry[0].c_str() ;
strAry.erase(strAry.begin()) ;
strData = ::String_Join_Line(strAry).c_str() ;
}
}
}
}
送信部分も,SendRequestEx から SendRequest に変更.
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T(“/…/t_mfc_h/t_mfc_h.php”)) ;
pFile->SendRequest(strHead,(LPVOID)LPCTSTR(strData),strData.GetLength()) ;
pFile->QueryInfoStatusCode(dwStatus) ;
2017/09/04 CHttpFile を利用したアップロード
UpFile.hxx
UpFile.hxx
データの送信 socket
3D データをアップするのに,複数のファイルを指定するのが面倒
調べてみると socket でいけそう?
利用するのは Win AP なので,MFC で良いかと思い調べると
CAsyncSocket や CSocket は適切ではないとのこと.
プログラミング Visual C++.NET Vol.2 活用編
第28章 インターネット通信の基礎 313 ページ
28.3.2 MFC の Winsock クラス
参考になるコードを探したが,その範囲でわかりやすかったのがここ.
http://www.katto.comm.waseda.ac.jp/~katto/
http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html
但し,そのままのコードではコンパイルエラーなどが少しあったので修正.
また,#ifdef _MSC_VER で一つのコードに.
sock_tcp.zip
VC 6 と DS115j でビルドし動作を確認.
ここまでの範囲では,クライアントからサーバに固定の文字列を送信.
LAN 内の PC と NAS などで相互に確認済み.
tcp_s.cpp のコードを一部修正.
char buffer[BUFFER_SIZE+10]; // +10 の大きさに
受信部分で
while(1) {
memset(&buffer,0,sizeof(buffer)) ; // バッファのクリアを追加
numrcv = recv(dstSocket, buffer, BUFFER_SIZE, 0);
…
}
サーバ側の tcp_s.exe を実行.
次の様な html を用意して,ブラウザで開く.
<!DOCTYPE html>
<html lang=”ja” >
<head >
<meta charset=”UTF-8″ />
</head>
<body >
<form action=”http://localhost:9876/” method=”post” enctype=”multipart/form-data”>
<input type=”file” name=”fname”>
<input type=”submit” value=”upload”>
</form>
</body>
</html>
何も指定せずに「upload」.
C:\…\Iwao>”C:\…\tcp\tcp_s\Release\tcp_s.exe”
Waiting for connection …
Connected from 127.0.0.1
received: POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, appli
cation/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/ms
received: word, */*
Referer: http://ds115j/Test/test_up/test_up.htm
Accept-Language: ja
Content-Type: multipart/form-data; boundary=—————————7e13a71ce4098a
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows N
received: T 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Host: localhost:9876
Content-Length: 195
Connection: Keep-Alive
Cache-Control: no-cache
—————————
received: –7e13a71ce4098a
Content-Disposition: form-data; name=”fname”; filename=””
Content-Type: application/octet-stream
—————————–7e13a71ce4098a–
C:\…\Iwao>
ClassicASP や ASP.NET でのファイルのアップロード
ASP を使用して Web サーバーにファイルをアップロードする方法
IIS7 ファイルアップロード用ページを簡単に作成する方法
ASP.NET の方は動作確認済み.
http://www.geekpage.jp/
http://www.geekpage.jp/programming/winsock/