• 締切済み

InetコントロールHTTPでバイナリファイルをサーバにPUTする。

Inetコントロールを使用してHTTPでサーバ上にバイナリファイルを送信使用としています。 ExecuteメソッドのPUTを使用してみましたが、サーバ上のファイルサイズが0KBになってしまい、正常に送信されていません。 Dim bData() As Byte Dim intFile As Integer intFile = FreeFile() Open "D:\Temp\aaa.mdb" For Binary Access Read As #intFile ReDim bData(0 To LOF(intFile) - 1) 'ここでは、bDataに読み込めている。 Get #intFile, , bData Close #intFile Inet1.Execute "http://aaserver/files/aaa.mdb", "PUT", bData よろしくお願いします。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

HTTPのPUTの経験はないですが、 >Inet1.Execute "http://aaserver/files/aaa.mdb", "PUT", bData これはPOSTの方法で、PUTの場合は第3引数にファイル名を指定するようです。

参考URL:
http://www.microsoft.com/japan/developer/library/VBCon98/vbconusinginternettransfercontrol.htm
eoura
質問者

補足

引数にファイル名・・・MSDNのURLの様にやってみましたが、サーバ側のファイル名に関係なくサーバ側のファイルには、 ファイル名そのものが入ってしまいます。 GETの時には、バイト配列にセットしてからローカルファイルに書き出す方法が出来たので、逆は出来ないかと・・・

関連するQ&A

  • inetコントロールを使用したFTP送信の質問その1

    ローカルにあるファイルを、FTPサーバに送信するプログラムを作成しました。 inetコントロールを使用して、以下のようなプログラムを組みました。 Private sub ftp()  Inet1.Protocol=icFTP  Inet1.Url="ftp://xxx.xxx.xxx.xxx/"  Inet1.UserName="aaaa"  Inet1.Password="bbbb"  Inet1.Execute , "SEND x:\xxx\xxx.txt xxx/xxx.txt" End sub Private sub Inet1_StateChanged(Byval State As Integer) Dim sMsg As String  Select Case State   Case icRequestSent    sMsg = "送信完了"    TCall LogWrite(sMsg) ログをファイルに書く(自作関数)   Case icError    sMsg = Inet1.ResponseCode & " " & Inet1.ResponseInfo    Call LogWrite(sMsg) エラーログをファイルに書く(自作関数)  End Select End Sub ファイルを複数送信するため、「sub ftp()」は複数回呼び出されます。 上記プログラムにCLOSEコマンドとCANCELメソッドを追加して、以下のようにしたほうがよいのでしょうか? CLOSEコマンドとCANCELメソッドの使い方がよくわからず、悩んでいます。 Private sub ftp()  Inet1.Protocol=icFTP  Inet1.Url="ftp://xxx.xxx.xxx.xxx/"  Inet1.UserName="aaaa"  Inet1.Password="bbbb"  Inet1.Execute , "SEND x:\xxx\xxx.txt xxx/xxx.txt"  Inet1.Execute , "CLOSE" End sub Private sub Inet1_StateChanged(Byval State As Integer) Dim sMsg As String  Select Case State   Case icRequestSent    sMsg = "送信完了"    TCall LogWrite(sMsg) ログをファイルに書く(自作関数)   Case icError    sMsg = Inet1.ResponseCode & " " & Inet1.ResponseInfo    Call ErrLogWrite(sMsg) エラーログをファイルに書く(自作関数)    Inet1.Cancel  End Select End Sub

  • FTP対応のアプリケーション

    INETコントロールを使って、サーバとファイルの送受信をするアプリを作りたいのですが、基本的なところでつまづいています。 サンプルプログラムを見つけたので試してみているのですが。 以下。 Private Sub cmdDownload_Click() Dim GetBuf() As Byte Dim FileNum As Integer GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray) FileNum = FreeFile Open txtSavePath.Text For Binary Access Write As FileNum Put #FileNum, , GetBuf() Close #FileNum MsgBox "ダウンロード終了" End Sub ここで、txtURL.Text に何を記述したらいいのか、はっきり分かりません。 サーバー名にファイルのあるディレクトリを付けた形、 ftp://servername/home/tmp/test.txt サーバーのIPアドレスにファイルのあるディレクトリを付けた形、 ftp://172.20.1.17/home/tmp/test.txt を試してみたのですが、うまくダウンロードできません。 目的のプログラムは Executeメソッドを使ってファイルの送受信をしたいのですが、どちらにしてもURLの記述ができないとダメなのですよね? どうぞ、よろしくお願いいたします。

  • InetでHTTPのPOST設定方法

    Inetコントロールで、HTTPサーバにPOSTを使用しデータを送信しようと考えているのですが、 いろいろ調べたところ、できるようになりました。 ソースは以下の通りです。 Inet1.Execute "アドレス" _, "POST" _, "msg=あああ" _, "Content-Type: application/x-www-form-urlencoded" 上記のソースでサーバ側でmsgと指定し「あああ」という値を 取得することができました。 しかし、POSTで複数のデータを送ることができません。 例えば値をnameとmsgの二つを送る場合、 "msg=あああ"の部分にどのように記述すればよいのでしょうか? それとも根本的に何か違うのでしょうか? よろしくお願いします。

  • VB.NETでサーバーからFILEを取得する

    サーバー上にあるテキストファイルを FTPで取得したいのですが VBであればInetを使用して↓のように取得が可能 だったのですがVB.NETでのInetの使用方法がわかりません どなたかご存知の方がいらしたらご教授願えますか? また、別の方法がありましたらアドバイスをお願いします。 宜しくお願いいたします。 ==================== Dim FileName As String Inet.URL = "ftp://hostname/home/temp/" Inet.UserName = "username" Inet.Password = "password" Inet.Execute(, "GET test.txt " & FileName) Do While Inet.StillExecuting = True DoEvents() Loop MsgBox("ダウンロード終了") ====================

  • バイナリーファイルの追記

    VB初心者です。 3レコードからなる90バイトのバイナリーファイルの 最後のレコードだけを上書きしたいのですが、うまく いきません。どう書けば良いのでしょうか? 宜しくお願い致します。 '------------------------------------------------ Public Type REC_INFORMATION AA As Long BB As Single CC As Single DD As Single EE As Single FF As Single GG As Single HH As Integer End Type Public RecInfo As REC_INFORMATION '------------------------------------------------------------- Dim ByteCNT as Long RecInfo.AA = CLng("123") RecInfo.BB = CSng("123") RecInfo.CC = CSng("123") RecInfo.DD = CSng("123") RecInfo.EE = CSng("123") RecInfo.FF = CSng("123") RecInfo.GG = CSng("1") RecInfo.HH = CInt("1") Open "c:\TEST.bin" For Binary As #1 ByteCNT = LOF(1) Seek #1, (ByteCNT - 29) Put #1, , RecInfo Close #1

  • バイナリデータの中からMidのように指定範囲を取得したい

    教えて下さい。 VB6です。 テキストファイルをバイナリモードで開き、Midのように特定の位置から、 必要な分を取得し、ファイルを分割させたいです。 調べてたら、 Open 読込ファイル For Binary As #1 Open 書込ファイル For Binary As #2 ReDim bytData(1 To LOF(1)) Get #1, , bytData() Put #2, , bytData() close #1 close #2 というのを見つけました。これだとそのままコピーします。 ここから、指定された、バイト数目から指定されたバイト数までの データを取得し別のファイルを作りたいのですが、 うまくできません。どうしたら、望むことができるでしょうか? お助け下さい。

  • Inet で FTP のファイル送信したときのファイル属性

    Inet の FTP でサーバ(UNIX)へファイルを送信すると、 ファイル属性が(rw_r__r__)になります。 FFFTPを使っても同じなので、Inetの問題ではないのですが。 サーバ側の(.cshrc)ファイルでは、umaskは(002)です。 それなら、(rw_rw_r__)になっていいと思うのですが、どなたかどこに設定すればいいのか、ご存知でしたらお教えください。

  • 【VB6.0】ファイルからサイズの大きいバイナリデータを読み込む際にエラー

    はじめまして。 初投稿の新米プログラマです。 VB6.0で多種類のファイルをバイナリデータとして読み込んで 返却する関数を作成しています。 '------------------------------------- ' ファイルからバイナリデータを読み込む '------------------------------------- private Function GetBinaryData(ByVal strFileName As String) As Byte() On Error GoTo Exception Dim fileNo As Integer Dim fileSize As Long Dim bytData() As Byte 'ファイルのサイズを取得する fileSize = FileLen(strFileName) ReDim bytData(fileSize - 1) 'バイナリデータ読み込み fileNo = FreeFile Open strFileName For Binary Access Read As fileNo Get #fileNo, , bytData Close #fileNo '戻り値の設定 GetBinaryData = bytData Exit Function 'エラー処理 Exception: MsgBox (CStr(Err.Number) & " " & Err.Description) End Function ですが、↑の関数にサイズの大きなファイル(100M程度)を指定したとき  ReDim bytData(fileSize) で、「メモリが不足しています」というエラーが発生してしまいます。 発生の仕方としては、'エラー処理のMsgBoxで表示されることも ありますし、プログラムが停止することもありますし、 On Error GoToを記述しているのにも関わらず VBのメッセージボックスが表示されることもあります。  #[継続][終了][デバッグ][ヘルプ]のボタンが出ているやつです。 ちなみに、50M程度のファイルであれば読み込めています。 このエラーが発生する原因は何なのでしょうか? また、解決方法(サイズの大きなファイルを確実に読み込む方法)は あるのでしょうか? 解決方法がないのであれば、「○M以上のファイルはエラー」という 仕様にしようと思うのですが、 何Mまでなら確実に読み込むことが出来るのでしょうか? …もしくは上のコーディング自体、検討違いでしょうか^^;  #バイト配列の要素数に上限があるとか…? とても困っています… どうかよろしくお願い致します。

  • dimを使わずにredimを使う場合

    VBAを使っていて、 配列数を変数で定義したいのですが、 ネットで検索すると Dim aaaa() as integer Redim aaa(xxx, yyy) あるいは Dim aaaa() Redim aaa(xxx, yyy) as integer のようにdimで変数を定義した後にredimで定義しなおす方法が書かれてあります。 一方で、 Redim aaa(xxx, yyy) as integer のように、dimの定義を省略して、いきなりredimで配列を定義しても 問題なくプログラムは実行できることに気がついたのですが これら二つの方法に違いはあるのでしょうか? 後者を使っても問題ないでしょうか?

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。