POSTでバイナリファイルが送信できない

[ リスト表示 ] [ ホームページ ]
投稿者:ごりぞう - 投稿日時:2003年01月07日 09時59分03秒
引用

はじめまして

Win2000 Pro SP 2.0
VB 6.0 SP5
IE 5.5

セキュリティの問題でFTPは使えないのでHTTPでファイルをUPDATEすることになり、WINNETのHttpSendRequestでファイルをHTTPサーバに送信するプログラムを作成しています。

現在のところTEXTファイルやHTMLファイルをHTTPサーバに送信する分には、なにも問題なくHTTPサーバに送ることができるのですが、
バイナリファイル(gif,jpg,pdf等)のファイルをHttpSendRequestで送信すると、ファイルサイズが小さくなり、HTTPサーバに送ったファイルをバイナリエディタで見ると何バイトか欠けていました。

プログラムは
' WinNet.dll 初期化
lngInetHandle = InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)

' ネット接続
hHttpSession = InternetConnect(lngInetHandle,strServerNm_Work,intPortNo,vbNullString,vbNullString,INTERNET_SERVICE_HTTP, 0, 0)

' HTTP要求作成
lngUrlHandle = HttpOpenRequest(hHttpSession,"POST", g_FileUpLoad, "HTTP/1.1",strReferer,vbNullString,0,0)

' ヘッダー情報作成 Acceptを設定
sHeader = "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword,"*/*" & vbCrLf & vbNullString"
bRet = HttpAddRequestHeaders(lngUrlHandle,sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)

' Accept-Languageを設定
sHeader = "Accept-Language: ja" & vbCrLf & vbNullString
bRet = HttpAddRequestHeaders(lngUrlHandle,sHeader,Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)

' Content-Typeを設定
sHeader = "Content-Type: multipart/form-data; boundary=---------------------------7d21cef303f8" & vbCrLf & vbNullString
bRet = HttpAddRequestHeaders(lngUrlHandle,sHeader,Len(sHeader),HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)

' Proxy-Connectionを設定
sHeader = "Proxy-Connection: Keep-Alive" & vbCrLf & vbNullString
bRet = HttpAddRequestHeaders(lngUrlHandle,sHeader, Len(sHeader),HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)

' ユーザ認証作成
sHeader = "Authorization: Basic " & strECUserPass & vbCrLf & vbNullString
bRet = HttpAddRequestHeaders(lngUrlHandle, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)

' 転送ファイル作成
myString = "-----------------------------7d21cef303f8" & vbCrLf & "Content-Disposition: form-data; name=""systemfile""; " & "filename=" & """" & g_TMPFilePath & g_SysFile & """" & "" & vbCrLf & "Content-Type: text/plain" & vbCrLf & vbCrLf

' 転送ファイルを読み込む
hFile = CreateFile(g_TMPFilePath & g_SysFile, GENERIC_READ, 0&, 0&, OPEN_EXISTING, 0&, 0&)

'変数初期化
ReDim bytWork(FileLen(g_TMPFilePath & g_SysFile) - 1) As Byte

' ファイルを読み込む
Call ReadFile(hFile, bytWork(0), FileLen(g_TMPFilePath & g_SysFile), outFileSize, 0&)

' ファイルを閉じる
Call CloseHandle(hFile)

--ここで myString に設定されているヘッダ情報と読み込んだ転送ファイル情報をbyte変数に設定する--

' ファイルを送信する
strSendRequest = HttpSendRequest(lngUrlHandle, vbNullString, 0, StrConv(bytWork, vbUnicode), UBound(bytWork))

です。

HttpSendRequest のAPIの宣言が

Public Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA"
(ByVal hHttpRequest As Long,
ByVal sHeaders As String,
ByVal lHeadersLength As Long,
ByVal sOptional As String,
ByVal lOptionalLength As Long) As Integer

となっており,送信ファイルを設定する第4引数が 文字型なのが気になるのですが,WININET.Hのヘッダファイルを参照すると第4引数の型は"LPVOID"になっているの問題ないように見えます。

なにか やり方がまずいのでしょうか?

どうかご教授お願いします。

この記事に対するコメント

解決しました

[ リスト表示 ] [ ホームページ ]

GeoCities