記事
· 2025年3月4日 2m read

ObjectScriptを使用し、ローカルファイルを他のサーバーにアップロード(POST)する方法

これは InterSystems FAQ サイトの記事です。
 

ObjectScriptの%Netパッケージのライブラリクラスを利用して、ファイルを他のサーバーにアップロードすることができます。

以下のCurl コマンドと同じことを ObjectScript で実現する方法を紹介します。

curl -X POST "http://localhost/api/upload?a=123&b=999" -F file=@"C:/temp/a.csv"

クライアントのObjectScriptコードを以下の様に作成します。

  // form-data (for CSV)
  set msg= ##class(%Net.MIMEPart).%New()

  set msg.ContentType = "multipart/form-data"
  set filePart = ##class(%Net.MIMEPart).%New()

  set filePart.ContentType = "text/plain"
  do filePart.SetHeader("Content-Disposition","form-data; name=""csvfile""; filename=""abc.csv""") 

  set stream=##class(%Stream.FileCharacter).%New()
  set sc=stream.LinkToFile("C:\temp\a.csv")
  set filePart = ##class(%Net.MIMEPart).%New(stream)
  set filePart.ContentType = "text/plain"
  do filePart.SetHeader("Content-Disposition","form-data; name=""csvfile""; filename=""upload.csv""")
  do msg.Parts.Insert(filePart) 
  set stream = ##class(%Stream.TmpCharacter).%New()

  set writer = ##class(%Net.MIMEWriter).%New()

  do writer.OutputToStream(.stream)

  do writer.WriteMIMEBody(msg)

  // POST with the above form-data
  set req=##class(%Net.HttpRequest).%New()

  set req.Server="127.0.0.1"
  set req.Port=80
  do req.SetParam("a","123")   ;; a=123
  do req.SetParam("b","999")   ;; b=999
  set req.EntityBody = stream

  set req.ContentType = "multipart/form-data, boundary="_msg.Boundary

  set sc = req.Post("/api/upload")

  do $SYSTEM.OBJ.DisplayError(sc)

  set res=req.HttpResponse

  write res.Data.Read(1000)
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください