記事
· 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 inputstream=##class(%Stream.FileCharacter).%New()
  set sc=inputstream.LinkToFile("C:\temp\a.csv")
  If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit
  set filePart = ##class(%Net.MIMEPart).%New(inputstream)
  set filePart.ContentType = "text/plain"
  do filePart.SetHeader("Content-Disposition","form-data; name=""csvfile""; filename=""upload.csv""")
  do msg.Parts.Insert(filePart) 
  set tempstream = ##class(%Stream.TmpCharacter).%New()

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

  do writer.OutputToStream(.tempstream)

  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 = tempstream

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

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

  If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit
  set res=req.HttpResponse

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