ObjectScriptを使用し、ローカルファイルを他のサーバーにアップロード(POST)する方法
これは InterSystems FAQ サイトの記事です。
ObjectScriptの%Netパッケージのライブラリクラスを利用して、ファイルを他のサーバーにアップロードすることができます。
以下のCurl コマンドと同じことを ObjectScript で実現する方法を紹介します。
curl -X POST "http://localhost/api/upload/csv?a=123&b=999" -F file=@"C:/temp/a.csv":/temp/a.csv"クライアントのObjectScriptコードを以下の様に作成します。
Class User.MyRestClient Extends%Base
{
ClassMethod readMimeData() As%Status
{
// form-data (for CSV)set msg= ##class(%Net.MIMEPart).%New()
set msg.ContentType = "multipart/form-data"set inputstream=##class(%Stream.FileBinary).%New()
set sc=inputstream.LinkToFile("c:¥temp¥a.csv")
If$$$ISERR(sc) Do$system.OBJ.DisplayError(sc) Quitset filePart = ##class(%Net.MIMEPart).%New(inputstream)
set filePart.ContentType = "text/csv; charset=utf-8"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-dataset req=##class(%Net.HttpRequest).%New()
set req.Server="127.0.0.1"set req.Port=80do req.SetParam("a","123") ;; a=123do req.SetParam("b","999") ;; b=999set req.EntityBody = tempstream
set req.ContentType = "multipart/form-data; boundary="_msg.Boundary
set sc = req.Post("/api/upload/csv")
If$$$ISERR(sc) Do$system.OBJ.DisplayError(sc) Quitset res=req.HttpResponse
write res.Data.Read(1000)
quit$$$OK
}
}
ディスカッション (0)0