첨부 파일 업로드(Upload Attachment) (V1)
액션에서 사용할 첨부 파일을 업로드합니다. 파일 바이트를 필수 본문으로 보내고 Content-Type: application/octet-stream을 지정합니다. JSON이나 multipart 파일 본문으로 바꾸지 않습니다.
필수 쿼리 매개변수 filename은 업로드할 파일 이름을 나타내는 문자열입니다. 예시 이름은 My Image.jpeg이며 URL에서는 공백을 인코딩합니다. 경로 매개변수는 없습니다.
업로드 이후 한 시간 안에 액션으로 객체에 연결하지 않은 파일은 제거됩니다. 이전에 연결했으나 현재 어떤 객체에도 연결되지 않은 파일은 격주(biweekly) 정리 대상입니다. 파일 크기 한도와 객체 연결 제한은 첨부 파일 수명을 함께 확인합니다.
응답
응답은 Attachment이며 rid, filename, sizeBytes, mediaType이 모두 필수입니다. sizeBytes는 바이트 단위 long을 나타내는 문자열이고 나머지는 문자열입니다. 받은 RID를 액션의 첨부 파일 매개변수에 사용하여 객체에 연결합니다.
HTTP 요청
POST /api/v1/attachments/upload
작업 식별자는 v1.uploadAttachment입니다. Authorization: Bearer <접근 토큰> 헤더로 인증합니다. OAuth 클라이언트에는 api:ontologies-write 권한 범위가 필요합니다.
JSON 응답 예시
가상 첨부 파일 My Image.jpeg의 메타데이터 응답 예시입니다.
{
"rid": "ri.attachments.main.attachment.bb32154e-e043-4b00-9461-93136ca96b6f",
"filename": "My Image.jpeg",
"sizeBytes": "393469",
"mediaType": "image/jpeg"
}
오류
실패 응답은 공통 API 오류의 형식으로 처리합니다.
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 아래 식별자와 입력값은 예시이므로 실제 요청 대상에 맞게 지정합니다.
UPLOAD_FILE에는 업로드할 실제 로컬 파일 경로를 지정합니다. JavaScript 예제는 ES 모듈에서 실행하며 파일을 Buffer로 읽어 보냅니다.
cURL
curl -X POST \
-H "Content-type: application/octet-stream" \
-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
"https://${FOUNDRY_HOST}/api/v1/attachments/upload?filename=My+Image.jpeg" \
--data-binary "@${UPLOAD_FILE}"
Python
Requests 라이브러리가 설치된 Python 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"content-type": "application/octet-stream",
"authorization": "Bearer {}".format(TOKEN)
}
with open(os.environ["UPLOAD_FILE"], "rb") as file_body:
response = requests.post('https://{}/api/v1/attachments/upload?filename=My+Image.jpeg'.format(HOSTNAME), headers=headers, data=file_body)
print(response)
Java
Apache HttpClient 4.5 API와 try-with-resources를 사용하는 예제입니다. 클래스 이름에 맞는 UploadAttachmentExample.java 파일에서 사용합니다.
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.File;
import org.apache.http.entity.FileEntity;
public class UploadAttachmentExample {
public static void main(String[] args) throws Exception {
String HOSTNAME = System.getenv("FOUNDRY_HOST");
String TOKEN = System.getenv("FOUNDRY_TOKEN");
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost("https://" + HOSTNAME + "/api/v1/attachments/upload?filename=My+Image.jpeg");
request.addHeader("content-type", "application/octet-stream");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
request.setEntity(new FileEntity(new File(System.getenv("UPLOAD_FILE"))));
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println(response);
}
}
}
}
JavaScript
fetch를 제공하는 Node.js 환경에서 사용합니다. 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.
import { readFileSync } from "node:fs";
const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;
fetch(`https://${HOSTNAME}/api/v1/attachments/upload?filename=My+Image.jpeg`, {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
'Authorization': `Bearer ${TOKEN}`,
},
body: readFileSync(process.env.UPLOAD_FILE)
}).then((response) => {
console.log(response)
});
PowerShell
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST
$headers = @{
"authorization" = "Bearer $TOKEN"
}
$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v1/attachments/upload?filename=My+Image.jpeg" `
-Method Post `
-Headers $headers `
-ContentType application/octet-stream `
-InFile $env:UPLOAD_FILE
$response.content