takeSnap
parent
dc6194f7e7
commit
cdee582951
|
@ -1,37 +1,51 @@
|
||||||
const puppeteer = require('puppeteer');
|
const puppeteer = require("puppeteer");
|
||||||
|
const axios = require("axios");
|
||||||
|
const fs = require("fs");
|
||||||
|
const FormData = require("form-data");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
const takeSnap = async (req, res) => {
|
const takeSnap = async (req, res) => {
|
||||||
// Set CORS headers
|
try {
|
||||||
res.setHeader('Access-Control-Allow-Origin', '*'); // Allow all origins
|
const { url, itemId } = req.body;
|
||||||
res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS'); // Allow POST and OPTIONS
|
if (!url || !itemId) {
|
||||||
res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); // Allow Content-Type header
|
return res.status(400).json({ error: "URL and itemId are required" });
|
||||||
|
|
||||||
|
|
||||||
// Handle preflight request (OPTIONS)
|
|
||||||
if (req.method === 'OPTIONS') {
|
|
||||||
res.status(200).end(); // Respond to preflight request
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1️⃣ Take Screenshot
|
||||||
|
const browser = await puppeteer.launch({ headless: "new" });
|
||||||
try {
|
|
||||||
const url = req.body.url;
|
|
||||||
const browser = await puppeteer.launch();
|
|
||||||
const page = await browser.newPage();
|
const page = await browser.newPage();
|
||||||
await page.goto(url, { waitUntil: 'networkidle2' });
|
await page.goto(url, { waitUntil: "networkidle2" });
|
||||||
|
|
||||||
// Take screenshot and convert to base64
|
|
||||||
const screenshot = await page.screenshot({ encoding: 'base64', fullPage: true });
|
|
||||||
|
|
||||||
|
const screenshotPath = path.join(__dirname, "screenshot.png");
|
||||||
|
await page.screenshot({ path: screenshotPath, fullPage: true });
|
||||||
await browser.close();
|
await browser.close();
|
||||||
console.log('Screenshot taken');
|
|
||||||
|
|
||||||
// Send the base64-encoded image in the response
|
// 2️⃣ Upload Screenshot to Directus (No Authorization Required)
|
||||||
res.status(200).json({ image: screenshot });
|
const formData = new FormData();
|
||||||
|
formData.append("file", fs.createReadStream(screenshotPath));
|
||||||
|
|
||||||
|
const uploadResponse = await axios.post(
|
||||||
|
"https://game-du.teachertrainingkolkata.in/files",
|
||||||
|
formData,
|
||||||
|
{ headers: { ...formData.getHeaders() } } // No Authorization needed
|
||||||
|
);
|
||||||
|
|
||||||
|
const fileId = uploadResponse.data.data.id;
|
||||||
|
console.log("File uploaded to Directus with ID:", fileId);
|
||||||
|
|
||||||
|
// 3️⃣ Update Directus Collection (No Authorization Required)
|
||||||
|
await axios.patch(
|
||||||
|
`https://game-du.teachertrainingkolkata.in/items/game_drawing_v3/${itemId}`,
|
||||||
|
{ thumbnail: fileId }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Delete local file after upload
|
||||||
|
fs.unlinkSync(screenshotPath);
|
||||||
|
|
||||||
|
res.json({ success: true, fileId, message: "Screenshot taken and uploaded successfully!" });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error taking screenshot:', error);
|
console.error("Error taking screenshot:", error);
|
||||||
res.status(500).json({ error: 'Failed to take screenshot' });
|
res.status(500).json({ error: "Failed to take screenshot" });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue