Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Jedes Fabric-Element hat Zugriff auf OneLake-Speicher, der eine sichere, skalierbare Möglichkeit zum Speichern von Dateien bietet, die Ihrem Element zugeordnet sind. In diesem Handbuch wird erläutert, wie Sie Dateien mithilfe der zugrunde liegenden FabricPlatformAPIClient- und OneLakeClient-Elemente auf Ihr Fabric-Element hochladen.
Verständnis der Speicherung von Items in Fabric
Jedes Element in Fabric verfügt über einen eigenen dedizierten Speicherbereich in OneLake. Dieser Speicher ist in Ordnern organisiert, wobei die hauptordner sind:
- Dateien – Zum Speichern allgemeiner Dateien und Dokumente
- Tabellen – Zum Speichern von Tabellendaten
Voraussetzungen
Bevor Sie Dateien in Ihr Element hochladen, benötigen Sie Folgendes:
- Ein gültiger Fabric-Arbeitsbereich
- Ein vorhandenes Element, in das Sie die Datei hochladen möchten
- Geeignete Berechtigungen zum Schreiben in das Element
Erstellen des FabricPlatformAPIClient
Erstellen Sie zunächst eine FabricPlatformAPIClient Instanz:
import { getWorkloadClient } from "../controller/WorkloadClient";
import { FabricPlatformAPIClient } from "../clients/FabricPlatformAPIClient";
// Create client using the current user's context
const fabricClient = FabricPlatformAPIClient.create(getWorkloadClient());
Beispiel: Hochladen einer Textdatei in ein Element
Hier erfahren Sie, wie Sie eine Textdatei mithilfe des OneLake-Clients in ein Element hochladen:
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;
}
}
Beispiel: Hochladen einer Binärdatei in ein Element
Bei Binärdateien wie Bildern oder PDF-Dateien müssen Sie die Datei zuerst in Base64 konvertieren:
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);
}
Beispiel: Hochladen einer Datei aus dem Browser
Wenn Sie eine Webschnittstelle erstellen, können Sie diese Funktion verwenden, um Dateiuploads aus einer Dateieingabe zu behandeln:
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);
});
}
Verwalten von Dateien in Ihrem Element
Sobald Dateien hochgeladen wurden, können Sie auch:
Überprüfen, ob eine Datei vorhanden ist
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);
}
Dateiinhalt lesen
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);
}
Löschen einer Datei
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`);
}
Bewährte Methoden für Dateiuploads
- Verwenden Sie geeignete Dateiformate: Berücksichtigen Sie den Zweck der Datei und verwenden Sie Formate, die weit verbreitet werden.
- Behandeln Sie Fehler ordnungsgemäß: Schließen Sie immer die Fehlerbehandlung für Netzwerkprobleme oder Berechtigungsprobleme ein.
- Überprüfen von Dateigrößen: Große Dateien können länger dauern, um sie hochzuladen und zu verarbeiten.
- Überprüfen Sie die Berechtigungen: Stellen Sie sicher, dass der Benutzer über entsprechende Berechtigungen verfügt, bevor Sie uploads versuchen.
- Verwenden Sie Dateipräfixe oder Ordner: Bei komplexen Elementen mit vielen Dateien sollten Sie sie in Unterordnern organisieren.
Verwenden des OneLakeClientItemWrapper
Für den vereinfachten Zugriff auf Elementdateien können Sie folgendes OneLakeClientItemWrapperverwenden:
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)}...`);
}
Dieser Wrapper vereinfacht Dateivorgänge, indem die vollständige Pfaderstellung automatisch verarbeitet wird.