APK файл неправильно скачивается с гугл диска
Я написал сервер на node.js и вот код скачивания:
const { google } = require("googleapis");
function LoadGamesAPI(app) {
app.get('/api/load-games', (req, res) => {
res.json({ "message": "Waiting for GET..." });
});
app.post('/api/load-games', async (req, res) => {
const { fileId } = req.body;
try {
const auth = new google.auth.GoogleAuth({
keyFile: './API Components/games.json', scopes: ['https://www.googleapis.com/auth/drive.readonly']
});
const drive = google.drive({ version: 'v3', auth });
const response = await drive.files.get({ fileId }, { responseType: 'stream' });
res.set({
'Content-Disposition': 'attachment; filename="fruit_ninja.apk',
'Content-Type': 'application/vnd.android.package-archive',
});
response.data.on('end', () => {
res.end();
});
response.data.on('error', (err) => {
console.error('Ошибка потока:', err);
res.status(500).json({ "error": "Ошибка потока" });
});
response.data.pipe(res);
} catch (error) {
console.error('Ошибка загрузки файла:', error);
res.status(500).json({ "error": "Ошибка загрузки файла" });
}
});
}
module.exports = LoadGamesAPI;
ну и в index.js там все корректно запускается. И написал клинет на react.js
import React from 'react';
import axios from 'axios';
export function Game4() {
const loadGame = async () => {
console.log("Downloading game...");
const SERVER = "http://localhost:5000";
const fileId = "1oE9Z5H12Ip8-hnBmZwyvtncXWm-H2Gl0";
try {
const response = await axios.post(`${SERVER}/api/load-games`, { fileId }, { responseType: 'blob' });
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'fruit_ninja.apk');
document.body.appendChild(link);
link.click();
} catch (error) {
console.error('Ошибка загрузки игры:', error);
}
};
return (
<div className='div'>
<h1 style={{ "text-align": "center", "position": "relative", "padding-top": "30px" }}>Fruit Ninja</h1>
<div className="download-links">
<button className="download-button" onClick={() => loadGame()}>Скачать с сервера</button>
</div>
</div>
);
}
Ну так вот все вроде-бы работает. НО когда открываешь файл (во первых он весит 100байт) то внутри него json
{
"kind": "drive#file",
"id": "1oE9Z5H12Ip8-hnBmZwyvtncXWm-H2Gl0",
"name": "fruit-ninja.apk",
"mimeType": "application/vnd.android.package-archive"
}
Это вообще как фиксить?
Ответы (1 шт):
Автор решения: Кирилл К.
→ Ссылка
там платно это. узнал давно, а написал только сейчас, потому что мне аккаунт забанили (на вопросы).