หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ทุกรายการ Fabric สามารถเข้าถึงที่เก็บข้อมูล OneLake ซึ่งให้วิธีที่ปลอดภัยและปรับขนาดได้ในการจัดเก็บไฟล์ที่เกี่ยวข้องกับรายการของคุณ คู่มือนี้อธิบายวิธีการอัปโหลดไฟล์ไปยังรายการ Fabric ของคุณโดยใช้ และ FabricPlatformAPIClientOneLakeClientพื้นฐาน .
ทําความเข้าใจการจัดเก็บรายการใน Fabric
แต่ละรายการใน Fabric มีพื้นที่จัดเก็บเฉพาะใน OneLake ที่เก็บข้อมูลนี้ถูกจัดระเบียบเป็นโฟลเดอร์ โดยมีโฟลเดอร์หลักคือ:
- ไฟล์ - สําหรับจัดเก็บไฟล์และเอกสารทั่วไป
- ตาราง - สําหรับจัดเก็บข้อมูลตาราง
ข้อกําหนดเบื้องต้น
ก่อนอัปโหลดไฟล์ไปยังสินค้า คุณต้องมีสิ่งต่อไปนี้
- พื้นที่ทํางาน Fabric ที่ถูกต้อง
- รายการที่มีอยู่ซึ่งคุณต้องการอัปโหลดไฟล์
- สิทธิ์ที่เหมาะสมในการเขียนไปยังรายการ
การสร้าง FabricPlatformAPIClient
ขั้นแรก ให้สร้าง FabricPlatformAPIClient อินสแตนซ์:
import { getWorkloadClient } from "../controller/WorkloadClient";
import { FabricPlatformAPIClient } from "../clients/FabricPlatformAPIClient";
// Create client using the current user's context
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
ตัวอย่าง: การอัปโหลดไฟล์ข้อความไปยังรายการ
ต่อไปนี้เป็นวิธีอัปโหลดไฟล์ข้อความไปยังรายการโดยใช้ไคลเอ็นต์ OneLake:
async function uploadTextFileToItem(
workspaceId: string,
itemId: string,
fileName: string,
content: string
) {
try {
// Get the FabricPlatformAPIClient
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
// Access the OneLake client
const oneLakeClient = fabricClient.oneLake;
// Generate the file path in OneLake for this item
// This follows the pattern: workspaceId/itemId/Files/fileName
const filePath = oneLakeClient.constructor.getFilePath(workspaceId, itemId, fileName);
// Write the text content to the file
await oneLakeClient.writeFileAsText(filePath, content);
console.log(`Successfully uploaded ${fileName} to item ${itemId}`);
return true;
} catch (error) {
console.error("Error uploading file to item:", error);
throw error;
}
}
ตัวอย่าง: การอัปโหลดไฟล์ไบนารีไปยังรายการ
สําหรับไฟล์ไบนารี เช่น รูปภาพหรือ PDF คุณต้องแปลงไฟล์เป็น base64 ก่อน:
async function uploadBinaryFileToItem(
workspaceId: string,
itemId: string,
fileName: string,
fileData: ArrayBuffer // Binary file data
) {
try {
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
const oneLakeClient = fabricClient.oneLake;
// Convert binary data to base64
const base64Content = arrayBufferToBase64(fileData);
// Generate the file path
const filePath = oneLakeClient.constructor.getFilePath(workspaceId, itemId, fileName);
// Write the binary content to the file
await oneLakeClient.writeFileAsBase64(filePath, base64Content);
console.log(`Successfully uploaded binary file ${fileName} to item ${itemId}`);
return true;
} catch (error) {
console.error("Error uploading binary file to item:", error);
throw error;
}
}
// Helper function to convert ArrayBuffer to base64
function arrayBufferToBase64(buffer: ArrayBuffer): string {
let binary = '';
const bytes = new Uint8Array(buffer);
const len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
ตัวอย่าง: การอัปโหลดไฟล์จากเบราว์เซอร์
หากคุณกําลังสร้างเว็บอินเตอร์เฟส คุณสามารถใช้ฟังก์ชันนี้เพื่อจัดการการอัปโหลดไฟล์จากการป้อนไฟล์:
async function handleFileUpload(
workspaceId: string,
itemId: string,
fileInputElement: HTMLInputElement
) {
if (!fileInputElement.files || fileInputElement.files.length === 0) {
console.warn("No file selected");
return false;
}
const file = fileInputElement.files[0];
const fileName = file.name;
try {
// Read the file as ArrayBuffer
const fileBuffer = await readFileAsArrayBuffer(file);
// Upload based on file type
if (file.type.startsWith('text/')) {
// For text files, convert to string and upload as text
const textDecoder = new TextDecoder();
const textContent = textDecoder.decode(fileBuffer);
return await uploadTextFileToItem(workspaceId, itemId, fileName, textContent);
} else {
// For binary files, upload as base64
return await uploadBinaryFileToItem(workspaceId, itemId, fileName, fileBuffer);
}
} catch (error) {
console.error("Error processing file upload:", error);
throw error;
}
}
// Helper function to read file as ArrayBuffer
function readFileAsArrayBuffer(file: File): Promise<ArrayBuffer> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result as ArrayBuffer);
reader.onerror = reject;
reader.readAsArrayBuffer(file);
});
}
การจัดการไฟล์ในรายการของคุณ
เมื่ออัปโหลดไฟล์แล้ว คุณยังสามารถ:
ตรวจสอบว่ามีไฟล์อยู่หรือไม่
async function checkFileExists(workspaceId: string, itemId: string, fileName: string) {
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
const filePath = fabricClient.oneLake.constructor.getFilePath(workspaceId, itemId, fileName);
return await fabricClient.oneLake.checkIfFileExists(filePath);
}
อ่านเนื้อหาไฟล์
async function readTextFile(workspaceId: string, itemId: string, fileName: string) {
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
const filePath = fabricClient.oneLake.constructor.getFilePath(workspaceId, itemId, fileName);
return await fabricClient.oneLake.readFileAsText(filePath);
}
ลบไฟล์
async function deleteFile(workspaceId: string, itemId: string, fileName: string) {
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
const filePath = fabricClient.oneLake.constructor.getFilePath(workspaceId, itemId, fileName);
await fabricClient.oneLake.deleteFile(filePath);
console.log(`File ${fileName} deleted successfully`);
}
แนวทางปฏิบัติแนะนําสําหรับการอัปโหลดไฟล์
- ใช้รูปแบบไฟล์ที่เหมาะสม: พิจารณาวัตถุประสงค์ของไฟล์และใช้รูปแบบที่ได้รับการสนับสนุนอย่างกว้างขวาง
- จัดการข้อผิดพลาดอย่างสง่างาม: รวมการจัดการข้อผิดพลาดสําหรับปัญหาเครือข่ายหรือปัญหาการอนุญาตเสมอ
- ตรวจสอบขนาดไฟล์: ไฟล์ขนาดใหญ่อาจใช้เวลาในการอัปโหลดและประมวลผลนานขึ้น
- ตรวจสอบสิทธิ์: ตรวจสอบว่าผู้ใช้มีสิทธิ์ที่เหมาะสมก่อนที่จะพยายามอัปโหลด
- ใช้คํานําหน้าไฟล์หรือโฟลเดอร์: สําหรับรายการที่ซับซ้อนที่มีไฟล์จํานวนมาก ให้พิจารณาจัดระเบียบรายการเหล่านั้นในโฟลเดอร์ย่อย
การใช้ OneLakeClientItemWrapper
สําหรับการเข้าถึงไฟล์รายการที่ง่ายขึ้นคุณสามารถใช้:OneLakeClientItemWrapper
async function uploadFileWithItemWrapper(item, fileName, content) {
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
// Create a wrapper for simpler access to this specific item
const itemWrapper = fabricClient.oneLake.createItemWrapper({
workspaceId: item.workspaceId,
itemId: item.id
});
// Upload directly to the item (no need to specify paths)
await itemWrapper.writeFileAsText(fileName, content);
// Read the file back
const fileContent = await itemWrapper.readFileAsText(fileName);
console.log(`File uploaded and read back: ${fileContent.substring(0, 50)}...`);
}
ตัวห่อนี้ช่วยลดความยุ่งยากในการทํางานของไฟล์โดยจัดการการสร้างเส้นทางแบบเต็มโดยอัตโนมัติ