ข้ามไปยังเนื้อหา

ไฟล์และมีเดีย

จัดเก็บไฟล์และมีเดียจากแอปของคุณ ทุกไฟล์จะได้รับ URL สาธารณะถาวร

มีเดียใน Proyecta มีสองระดับ แอปส่วนใหญ่ใช้ ความสามารถด้านมีเดียของ CMS ในตัว — การอัปโหลดรูปภาพและไฟล์ที่ AI จัดการเชื่อมต่อเข้ากับ admin panel และฟอร์มให้คุณโดยอัตโนมัติ ในระดับที่ต่ำกว่านั้น Files API ในระดับล่างช่วยให้คุณควบคุมได้โดยตรงเมื่อจำเป็น ทั้งสองวิธีจัดเก็บข้อมูลบน object storage ที่รองรับ CDN และส่งคืน URL สาธารณะถาวร

ช่องป้อนข้อความในแชทรับรูปภาพได้โดยตรง — วางสกรีนช็อตหรือลากไฟล์รูปภาพไปวางที่ช่องป้อนข้อความ รูปแบบที่รองรับ: PNG, JPEG, WebP, GIF, AVIF ขนาดสูงสุด: 10 MB ต่อรูปภาพ

ไฟล์แนบในแชทเป็นส่วนหนึ่งของข้อความ ไม่ใช่ไลบรารีไฟล์ของคุณ สำหรับการจัดเก็บถาวร ให้ใช้การอัปโหลดมีเดียในตัวหรือ Files API

การอัปโหลดมีเดียในตัว (ความสามารถด้านมีเดียของ CMS)

หัวข้อที่มีชื่อว่า “การอัปโหลดมีเดียในตัว (ความสามารถด้านมีเดียของ CMS)”

แอปส่วนใหญ่ไม่ได้เรียกใช้ Files API โดยตรง — มีเดียเป็นความสามารถในตัวของ CMS template ของแอปมี upload hook สองตัวใน @/hooks/useContent และ AI จะเชื่อมต่อเข้ากับ UI ให้คุณ คุณแค่บอกสิ่งที่ต้องการ (“ฟิลด์รูปภาพในสินค้าของฉัน”, “อัปโหลดไฟล์ในฟอร์มติดต่อของฉัน”) แล้ว Proyecta จะเลือกใช้ hook ที่เหมาะสม:

Hook ใช้งานที่ไหน Endpoint ขนาดสูงสุด
useAssetUpload() ไลบรารีมีเดียใน admin — รองรับตัวเลือกไฟล์ใน content editor ของ admin panel POST /v1/public/files 10 MB
useFormFileUpload() ไฟล์ฟอร์มสาธารณะ — การอัปโหลดของผู้เยี่ยมชมในฟิลด์ไฟล์ของ <FormBlock/> (ใบเสร็จ, รูปภาพ) POST /v1/public/uploads 5 MB

ทั้งสอง hook ส่งคืน url สาธารณะถาวรที่คุณจัดเก็บไว้ใน content entry (admin) หรือการส่งฟอร์ม (สาธารณะ) สิ่งที่ควรทราบ:

  • ทั้งสองขนาดถูกกำหนดในโค้ด ไม่ใช่ตามแผนบริการ — 10 MB สำหรับมีเดียใน admin และ 5 MB สำหรับไฟล์ฟอร์มสาธารณะ
  • รองรับเฉพาะไฟล์ประเภทรูปภาพ (ยกเว้น SVG) และ PDF เท่านั้น SVG ถูกปฏิเสธเพื่อความปลอดภัย รูปภาพขนาดใหญ่จะถูกลดขนาดอัตโนมัติก่อนอัปโหลด
  • คุณไม่ต้องเรียกใช้ hook เหล่านี้โดยตรง — AI จะจัดการให้ ใช้ Files API ด้านล่างเฉพาะเมื่อต้องการจัดการไฟล์ในระดับต่ำกว่าหรือแบบกำหนดเองเท่านั้น

แอป Proyecta ที่ publish แล้วทุกแอปสามารถจัดเก็บและให้บริการไฟล์ได้ จากหน้าเพจของแอป งานนี้เป็นการเรียกเพียงครั้งเดียว — ขั้นตอน signed upload หลายขั้นถูกจัดการให้คุณแล้ว:

import * as platform from '@/lib/platformClient.ts';
// Upload straight from a file input — one call, no signed-URL juggling
async function onPick(file: File) {
const asset = await platform.assetDirectUpload({
blob: file,
filename: file.name,
mimeType: file.type,
});
console.log(asset.url); // permanent public URL
}
// List what's stored
const { assets, hasMore } = await platform.assetList({ limit: 20 });
// Remove one
await platform.assetDelete(asset.id);

ไฟล์ส่วนตัว ส่ง visibility: 'private' เพื่อจัดเก็บไฟล์นอก bucket สาธารณะโดยไม่มี URL ถาวร แล้วอ่านกลับมาด้วยลิงก์อายุสั้นแทน:

const { url, expiresAt } = await platform.assetSignedUrl(asset.id, { variant: 'thumbnail' });

ใช้ไฟล์ส่วนตัว + signed URL สำหรับทุกอย่างที่ไม่ควรถูกเดาได้ — ไฟล์ที่ลูกค้าอัปโหลด เอกสารยืนยันตัวตน หรือไฟล์ดาวน์โหลดที่ต้องชำระเงิน

การอัปโหลดไฟล์จัดการผ่าน AI builder แค่บอก AI ให้สร้างระบบอัปโหลดให้คุณ:

  • "ให้ผู้ใช้อัปโหลดรูปโปรไฟล์และจัดเก็บไว้ใน Proyecta Files"
  • "เพิ่มแกลเลอรีรูปภาพที่ผู้ใช้ที่ลงชื่อเข้าใช้แล้วสามารถอัปโหลดและดูรูปภาพของตัวเองได้"
  • "ให้ฉันแนบใบแจ้งหนี้ PDF กับออเดอร์ได้"

AI จะเชื่อมต่อระบบอัปโหลดในโค้ดแอปของคุณและอ้างอิง URL สาธารณะที่ได้รับกลับมา

URL ของไฟล์เป็นแบบสาธารณะหรือไม่?

ใช่ ทุกไฟล์ที่ส่งคืนจาก Files API มี URL สาธารณะถาวร อย่าอัปโหลดสิ่งที่คุณไม่ต้องการให้เปิดเผย

ไฟล์มีขนาดใหญ่ได้แค่ไหน?

ขนาดไฟล์ถูกจำกัดในโค้ด ไม่ใช่ตามแผนบริการ: 10 MB สำหรับการอัปโหลดไลบรารีมีเดียใน admin (useAssetUpload), 5 MB สำหรับการอัปโหลดไฟล์ฟอร์มสาธารณะ (useFormFileUpload) และ 10 MB สำหรับไฟล์แนบในแชท การอัปโหลดมีเดียในตัวรองรับเฉพาะรูปภาพ (ยกเว้น SVG) และ PDF เท่านั้น

ฉันสามารถ resize หรือ crop รูปภาพผ่าน URL ได้ไหม?

การแปลงรูปภาพแบบ on-the-fly (resize, crop, การแปลงรูปแบบ) อยู่ใน roadmap

  • การแปลงรูปภาพ ผ่าน URL parameters (resize, crop, การแปลงรูปแบบ)
  • การจัดระเบียบโฟลเดอร์ — สร้างและจัดการเส้นทางโฟลเดอร์สำหรับไฟล์ที่จัดเก็บ