Создать файл с Google Диском Api v3 (javascript)
Я хочу создать файл с контентом с помощью Google Диска API v3. Я прошел аутентификацию через OAuth и загрузил Drive API. Выражения вроде следующей работы (но создайте файл без содержимого):
gapi.client.drive.files.create({
"name": "settings",
}).execute();
К сожалению, я не могу понять, как создать файл с содержимым. Я не могу найти пример JavaScript, используя Drive API v3. Есть ли какие-то специальные параметры, которые мне нужно передать?
Для простоты предположим, что у меня есть String как '{ "name": "test" }', который находится в формате JSON, который должен быть содержимым созданного файла.
Ответы
Ответ 1
вот решение с gapi.client.drive
,
var parentId = '';//some parentId of a folder under which to create the new folder
var fileMetadata = {
'name' : 'New Folder',
'mimeType' : 'application/vnd.google-apps.folder',
'parents': [parentId]
};
gapi.client.drive.files.create({
resource: fileMetadata,
}).then(function(response) {
switch(response.status){
case 200:
var file = response.result;
console.log('Created Folder Id: ', file.id);
break;
default:
console.log('Error creating the folder, '+response);
break;
}
});
вам нужно подключиться/авторизоваться с помощью одной из следующих областей
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
РЕДАКТИРОВАТЬ: можно создавать файлы Google (документы, листы и т.д.), Изменив mimeType
из application/vnd.google-apps.folder
на один из поддерживаемых типов Google MIME. ОДНАКО, на данный момент невозможно загрузить какой-либо контент в созданные файлы.
Для загрузки файлов используйте решение, предоставленное @Geminus. Обратите внимание, что вы можете загрузить текстовый файл или CSV файл и установить его тип контента в Google DOC или Google листов соответственно, и Google будет пытаться преобразовать его. Я проверил это для текста → документ, и это работает.
Ответ 2
К сожалению, я не нашел ответа, используя только api google, вместо этого я последовал за комментарием Gerardo и использовал api-запрос google. Ниже приведена функция, которая загружает файл на диск Google.
var createFileWithJSONContent = function(name,data,callback) {
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";
const contentType = 'application/json';
var metadata = {
'name': name,
'mimeType': contentType
};
var multipartRequestBody =
delimiter +
'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter +
'Content-Type: ' + contentType + '\r\n\r\n' +
data +
close_delim;
var request = gapi.client.request({
'path': '/upload/drive/v3/files',
'method': 'POST',
'params': {'uploadType': 'multipart'},
'headers': {
'Content-Type': 'multipart/related; boundary="' + boundary + '"'
},
'body': multipartRequestBody});
if (!callback) {
callback = function(file) {
console.log(file)
};
}
request.execute(callback);
}
Ответ 3
это отлично работает usin v3:
var fileMetadata = {
'name' : 'MaxBarrass',
'mimeType' : 'application/vnd.google-apps.folder'
};
gapi.client.drive.files.create({
resource: fileMetadata,
fields: 'id'
}).execute(function(resp, raw_resp) {
console.log('Folder Id: ', resp.id);
});
Ответ 4
/* Now to create a new file */
function insertNewFile(folderId)
{
var content = " ";
var FolderId = "";
var contentArray = new Array(content.length);
for (var i = 0; i < contentArray.length; i++)
{
contentArray[i] = content.charCodeAt(i);
}
var byteArray = new Uint8Array(contentArray);
var blob = new Blob([byteArray], {type: 'text/plain'});
insertFile(blob, fileInserted, folderId);
}
function fileInserted(d)
{
setPercent("100");
var FI = FolderId;
if(FI !== myRootFolderId)
{
insertFileIntoFolder(FI, d.id);
removeFileFromFolder(d.parents[0].id,d.id);
}
openFile(d.id);
}
function insertFileIntoFolder(folderId, fileId)
{
var body = {'id': folderId};
var request = gapi.client.drive.parents.insert({
'fileId': fileId,
'resource': body });
request.execute(function(resp) { });
}
Источник: https://gist.github.com/mkaminsky11/8624150