在我的界面项目中,我想截取当前屏幕的屏幕截图,并在 GitHub 上的项目相关存储库中创建一个问题,并填写标题和描述。我尝试编写一个服务来执行此操作。根据我的研究,我发现我需要使用“/gists”向问题添加图像。
我使用 Gist 创建一个 URL。但是,在该问题中,该 URL 似乎已损坏。当我访问URL时,我遇到了base64。 Base64 给我图像本身。如何在问题中显示使用 /gist 创建的图像而不显得损坏?
这是我的代码。
app.post('/create-issue',upload.single('file'), async (req, res) => {
const file = req.file;
const {title,issue} = req.body;
if (!file) return res.status(400).send('No file uploaded.');
try {
const filePath = path.join(__dirname, 'uploads', file.filename);
const fileContent = fs.readFileSync(filePath);
const response = await githubApi.post('/gists', {
description: 'Issue image upload',
public: true,
files: {
[file.originalname]: {
content: 'data:image/png;base64,'+fileContent.toString('base64'),
},
},
});
// const gistUrl = response.data.html_url;
const imageFile = response.data.files[file.originalname];
const imageUrl = imageFile.raw_url;
fs.unlinkSync(filePath);
const issueBody = `${issue}\n\n`;
try {
const _resp = await githubApi.post(`/repos/${GITHUB_ORG}/${GITHUB_REPO}/issues`, {
title: title,
body: issueBody,
});
res.json(_resp.data);
} catch (error) {
console.error('Error creating issue:', error.response.data);
res.status(500).send('Failed to create issue.');
}
} catch (error) {
console.error('Error uploading image:', error.response.data);
res.status(500).send('Failed to upload image.');
}
});
我考虑过创建一个新的存储库并将图像上传到那里,但我不想要一个仅包含图像的存储库。当我尝试这个时,我遇到了以下错误:
Error uploading image: {
message: 'Could not create file: Changes must be made through a pull request.',
documentation_url: 'https://docs.github.com/articles/about-protected-branches',
status: '409'
}
我希望使用 Gist 创建的链接在问题中显示为图像。
创建图像要点后,您需要检索原始图像 url。此 url 返回正确的内容类型,可以在创建问题时使用。
要查找原始图像 url,您可以调用此 API:
/gists/:gist-id
其中 gist-id 是创建 gist 时返回的
id
。
上述 API 调用的响应将包含您的文件的
raw_url
:
"files": {
"image.jpg": {
"raw_url": "https://gist.githubusercontent.com/.../image.jpg"
}
注意:确保在创建图像要点时,图像文件扩展名是标准扩展名之一,以便可以派生内容类型。