記事
· 2025年2月25日 2m read

クライアントからPOSTされた ファイルを受け取るRESTサービスを作成する方法

これは 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()
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください