我正在尝试使用Google Drive API来存储一些不属于公共git存储库的秘密文件。 (例如Nginx虚拟主机配置文件,数据库初始化文件的压缩目录树等),以便在需要时可以将它们拉入服务器安装脚本中。
我已经将它们手动放置在其中,并且我的NodeJs应用程序能够毫无问题地提取单个文本文件。 不幸的是,压缩文件并非如此。
我可以将压缩文件拖放到Drive文件夹中,然后选择它,下载,解压缩,然后回到原来的位置。因此,我知道文件本身确实可以保存在那里。毫不奇怪。
我的成功完成测试文件提取的NodeJs应用程序如下所示:
const fs = require('fs');
const { google } = require('googleapis');
const { authorize, loadToken } = require('./auth');
const fileId = process.argv[2];
const fileName = process.argv[3];
const targetPath = process.env.XDG_RUNTIME_DIR;
/**
* Gets a single file from GDrive and writes it to ${XDG_RUNTIME_DIR}
* File specified by the command line parameters
* - 1st. fileId
* - 2nd. fileName
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
function getFile(auth) {
const drive = google.drive({ version: 'v3', auth });
const options = {encoding:'utf-8', flag:'w'};
drive.files.get({
fileId: fileId,
// mimeType: 'application/gzip',
alt: 'media'
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
process.stdout.write(fileName);
const filePath = `${targetPath}/${fileName}`;
fs.writeFileSync(filePath, res.data, options);
});
}
// Load client secrets from a local file.
fs.readFile('credentials.json', (err, content) => {
if (err) return console.log('Error loading client secret file:', err);
// Authorize a client with credentials, then call the Google Drive API.
authorize(JSON.parse(content), getFile);
});
为了展示我所看到的内容,我创建了一个很小的tar.gz
。
这是上传到GDrive之前的样子:
me@desktop:~/temp$ ls -la Example.tar.gz
-rw-r--r-- 1 me us 551 Mar 8 06:53 Example.tar.gz
me@desktop:~/temp$ tar -tf Example.tar.gz
bottles/
bottles/design/
bottles/design/bottles.json
bottles/bottles_short.json
me@desktop:~/temp$ cat Example.tar.gz; echo "";
�W�\��Qo�0�y���`�Ю�lb��)͞��
9@W��t�"��� P Z�II���������yf�*οZ'����(|O��K����{.��w-����j��QƬ��U�L�K�e����>=M���c9�!,}����������?=���^
<������I�����=�3|����ف��o0t��vP{���TL��:PX��R��7٨�ފcZ�=�I�����D1e�2:�F��3V���u̦�);�&;��8ѦI�v ~k���oI�,��YG�B(�
���;+Xa��S
�W
ڇ��ߏA��6�����BH����������[��ɡy��?�e�����������-���v�\l~���tt3�����>�.E�fv}�WѨ��w����(f�\�K~u�E'k;ס
ap����i�k�u.-�[>�
NAAAAAA��?{��(�?.���_�v��"���g���"�p7���
me@desktop:~/temp$
使用googleapis
从GDrive下载后的外观如下:
注意,它的大小是磁盘的两倍,但是cat
中的内容看起来非常相似。
me@server:/run/user/1001$ ls -la Example.tar.gz
-rw-rw-r-- 1 me us 1011 Mar 8 04:39 Example.tar.gz
me@server:/run/user/1001$ tar -tf Example.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
me@server:/run/user/1001$ cat Example.tar.gz; echo "";
�W�\�Qo�0�y���`�Ю�lb��)͞��
9@W��t�"��� P Z�II���������yf�*οZ'����(|O��K����{.��w-��j��QƬ��U�L�K�e����>=M���c9�!,}���������?=���^
<�����I����=�3|����ف��o0t��vP{��TL��0K�*4A���AI�'Yl���,e_�,�`;���(RF��3V���u̦�);�&;��8ѦI�v ~:PX��R��7٨�ފcZ�=�I�����D1e�2:�
���;+Xa��S
�W
ڇ��ߏA��6����BH����������[��ɡy��?�e����������-���v�\l~���tt3�����>�.E�fv}�WѨ��w����(f�\�K~u�E'k;ס
ap����i�k�u.-�[>�
NAAAAAA��?{��(�?.��_�v��"���g���"�p7���
me@server:/run/user/1001$
从注释行中可以看到,我尝试设置mimeType
。没什么。
我有三个问题:
答案 0 :(得分:0)
Geez。我想这是一个很好的例子,“如果您不能解决问题,只需告诉印度木匠”即可。
当然,预处理和后处理是答案。 h!
在推出GDrive之前:
base64 Example.tar.gz > Example.tar.gz.b64
退出GDrive后:
base64 -d Example.tar.gz.b64 > Example.tar.gz
**在上个千年中,就像理发店外面有一个红色和白色的螺旋状“理发杆”一样,烟草业者也有一个木制的印第安人。通常,有with问题的吸烟者会在印第安人面前起搏,喃喃自语和打手势。奇怪的是,这不是让潜意识进行研究的好方法。