Homesit

$scope.compressImageAndUpload = async function() {
    const fileInput = $scope.view.wdg['FileUpload-1'].file;

    if (!fileInput || fileInput.length === 0) {
        alert("Please select an image first.");
        return;
    }

    const file = fileInput[0];

    const compressedBase64 = await compressImage(file);

    const byteCharacters = atob(compressedBase64);
    const byteNumbers = Array.from(byteCharacters, c => c.charCodeAt(0));
    const byteArray = new Uint8Array(byteNumbers);
    const compressedBlob = new Blob([byteArray], { type: "image/jpeg" });

    uploadToRepository(compressedBlob, file.name);
};

function compressImage(file) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);

        reader.onload = (e) => {
            const img = new Image();
            img.src = e.target.result;

            img.onload = () => {
                const canvas = document.createElement("canvas");
                const maxWidth = 800;
                const scale = maxWidth / img.width;

                canvas.width = maxWidth;
                canvas.height = img.height * scale;

                const ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

                canvas.toBlob((blob) => {
                    const reader2 = new FileReader();
                    reader2.readAsDataURL(blob);

                    reader2.onloadend = () => {
                        const base64 = reader2.result.split(",")[1];
                        resolve(base64);
                    };
                }, 'image/jpeg', 0.6); // Quality = 60%
            };

            img.onerror = () => reject("Image load error");
        };

        reader.onerror = () => reject("File read error");
    });
}

function uploadToRepository(blob, fileName) {
    const formData = new FormData();
    formData.append("file", blob, fileName);

    const uploadURL = "/Thingworx/FileRepositories/SystemRepository/Services/SaveBinary";

    fetch(uploadURL, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'X-XSRF-TOKEN': $rootScope.app.XsrfToken
        },
        body: formData
    }).then(response => {
        if (response.ok) {
            alert("Compressed Image uploaded successfully.");
        } else {
            alert("Upload failed.");
        }
    }).catch(err => {
        console.error("Upload error:", err);
        alert("Error during upload.");
    });
}



let result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape({
    infoTableName: "BreadcrumbData",
    dataShapeName: "FamilyBreadcrumbShape"
});

// Example path: Grandfather > Father > You > Your Daughter
result.AddRow({ text: "Grandfather" });
result.AddRow({ text: "Father" });
result.AddRow({ text: "You" });
result.AddRow({ text: "Your Daughter" });

return result;



let result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape({
    infoTableName: "OrgTree",
    dataShapeName: "OrganizationTreeShape"
});

result.AddRow({
    id: "ceo",
    name: "CEO",
    parentId: null,
    data: {"department": "Executive", "level": 1}
});

result.AddRow({
    id: "cto",
    name: "CTO",
    parentId: "ceo",
    data: {"department": "Technology", "level": 2}
});

// ... add all rows like your JSON

return result;


Comments

Popular posts from this blog

Login.js