これは InterSystems FAQ サイトの記事です。
以下の様なCurl コマンドで送信したファイルを受け取るRESTサービスを作成する方法を紹介します。
curl -X POST "http://localhost/api/upload/csv?a=123&b=999" -F file=@"C:/temp/a.csv"
クライアントからPOSTされたファイルを受け取ってサーバーに保存するRESTサービスは以下の様に作成します。
(このサンプルでは、1000文字以下の小さいサイズおよび文字コードはutf-8のファイルを想定しています。)
Class User.MyREST Extends %CSP.REST
{
Parameter HandleCorsRequest = 1
XData UrlMap
{
<Routes>
<Route Url="/csv" Method="POST" Call="readMimeData" />
</Routes>
}
ClassMethod readMimeData() As %Status
{
set upload=$g(%request.MimeData("csvfile", 1))
set fname=%request.MimeData("csvfile",1).FileName
set file=##class(%Stream.FileCharacter).%New()
set file.Filename = "c:¥temp¥"_fname
set file.TranslateTable = "UTF8"
set updata = upload.Read(1000)
set sc = file.Write($zcvt(updata,"I","UTF8"))
If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit sc
set st = file.%Save()
if st {
write fname_" アップロード完了!!"
} else {
write fname_" アップロード失敗"
}
quit $$$OK
}
}
このRESTサービスをクライアントから呼び出すために、以下の様な設定を行います。
管理ポータル>システム管理>セキュリティ>アプリケーション>ウェブ・アプリケーション>新しいウェブ・アプリケーションを作成の所で上で作成したRESTディスパッチクラスを登録します。
名前: /api/upload
ネームスペース: そのクラスを保存したネームスペース
RESTを有効にして、ディスパッチクラスにUser.MyRESTを設定する
この設定はAPIを呼び出して実行することもできます。
zn "%SYS"
set sec = ##class("Security.Applications").%New()
set sec.Name = "/api/upload"
set sec.NameSpace = "USER"
set sec.DispatchClass ="User.MyREST"
set sec.AutheEnabled = 96
set status = sec.%Save()