# ไฟล์

โมเดลที่รับรูปภาพ วิดีโอ หรือเสียง รองรับทั้งสามรูปแบบต่อไปนี้ แต่ละหน้าโมเดลจะระบุพารามิเตอร์
ไฟล์ของโมเดลนั้น (เช่น `image`, `images`, `videos`, `audios`)

## 1. URL สาธารณะ

URL `https://` (หรือ `http://`) ใด ๆ ที่โมเดลสามารถดาวน์โหลดได้:

```json
{ "image": "https://example.com/photos/product.jpg" }
```

ไฟล์ต้องเข้าถึงได้โดยไม่ต้องใช้คุกกี้หรือเข้าสู่ระบบ และต้องยังเข้าถึงได้จนกว่าคำขอจะเริ่มต้น แต่ละหน้าโมเดล
จะแสดงขีดจำกัดขนาดและมิติของพารามิเตอร์ไฟล์

## 2. data URI

ไฟล์ขนาดเล็กสามารถส่งมาในบรรทัดได้ในรูปแบบ URI `data:` ขนาดไม่เกิน 10 MB:

```json
{ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }
```

Base64 ทำให้เนื้อหามีขนาดใหญ่กว่าไฟล์ประมาณหนึ่งในสาม ดังนั้นควรใช้การอัปโหลดสำหรับไฟล์ขนาดใหญ่

## 3. การอัปโหลด

สำหรับไฟล์ในเครื่อง ให้ขอ URL สำหรับอัปโหลด ใช้ `PUT` ส่งไบต์ไปยัง URL นั้น แล้วส่ง `file_url` ที่ได้รับกลับมาให้โมเดล
การสร้าง URL สำหรับอัปโหลดไม่มีค่าใช้จ่าย

```bash 1 · รับ URL สำหรับอัปโหลด
curl -X POST "https://api.doitong.com/v1/files" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "product.jpg", "content_type": "image/jpeg", "size": 482113}'
```

```json 201 Created · อัปโหลด
{
  "object": "upload",
  "upload_url": "https://…signed upload URL…",
  "file_url": "https://content.doitong.com/…/product.jpg",
  "method": "PUT",
  "headers": { "Content-Type": "image/jpeg" },
  "content_type": "image/jpeg",
  "expires_in": 3600,
  "max_bytes": 15728640
}
```

```bash 2 · อัปโหลดไบต์โดยใช้ส่วนหัวที่ได้รับกลับมาโดยตรง
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · ใช้ file_url เป็นอินพุตของโมเดล
curl -X POST "https://api.doitong.com/v1/run/{model_id}?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image": "https://content.doitong.com/…/product.jpg", "prompt": "..."}'
```

- รูปแบบการอัปโหลดที่รองรับ: `.jpg`, `.jpeg`, `.png`, `.webp` (สูงสุด 15 MB) และ `.mp4`, `.mov`, `.webm` (สูงสุด 200 MB)
  นามสกุลจะกำหนดประเภทไฟล์ ส่วน `content_type` ต้องตรงกัน
- URL สำหรับอัปโหลดใช้ได้หนึ่งชั่วโมง ส่วน `file_url` ยังคงใช้ได้
- สำหรับเสียง ให้ใช้ URL สาธารณะหรือ data URI

## ไฟล์เอาต์พุต

> [!TIP]
> ไฟล์ที่สร้างขึ้นจะถูกคัดลอกไปยังพื้นที่จัดเก็บของเรา และส่งกลับมาใน `outputs[].url` เป็นลิงก์บน `content.doitong.com` คุณสามารถ
> ส่งไฟล์เหล่านี้เข้าโมเดลอื่นได้โดยตรง เช่น ส่งรูปภาพจากโมเดล text-to-image เข้าโมเดล image-to-video

คุณเลือกได้ว่าจะเก็บไฟล์เอาต์พุตไว้นานเท่าใด:

- **ตลอดไป** (`permanent`, ค่าเริ่มต้น): จนกว่าคุณจะลบไฟล์ ในราคา 100 เครดิต API
  ($0.10) ต่อ GB ต่อนาที เรียกเก็บวันละครั้งจากยอดคงเหลือ API (1 GB = 1024³ ไบต์)
- **7 วัน** (`temporary`): ฟรี จากนั้นจะถูกลบออกจากพื้นที่จัดเก็บของเรา

ตั้งค่าเริ่มต้นด้วยสวิตช์ "เก็บไฟล์ไว้ตลอดไป" ใน [แดชบอร์ด](https://doitong.com/developers/dashboard#balance) หรือด้วย
`PATCH /account/storage` และแทนที่ค่านี้ต่อการทำงานได้ด้วย `?storage=temporary` (หรือ `permanent`):

```bash
curl -X PATCH "https://api.doitong.com/v1/account/storage" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "temporary"}'
```

คำขอแต่ละรายการจะแสดง `storage` ของตัวเอง (`mode`, `bytes`, `expires_at`, `expired`) การตั้งค่านี้มีผลกับคำขอใหม่
ไฟล์ที่คุณเก็บไว้ตลอดไปแล้วจะยังคงอยู่จนกว่าคุณจะลบด้วย `DELETE /requests/{id}/files` (ดู
[คำขอ](https://doitong.com/developers/docs/requests#delete-files)) หากยอดคงเหลือ API ไม่เพียงพอสำหรับชำระค่าพื้นที่จัดเก็บ คุณจะได้รับอีเมล
และมีเวลา 30 วันในการเติมเงิน ก่อนที่ไฟล์ที่เก็บไว้จะเปลี่ยนเป็นแบบชั่วคราว
