Laden Sie das Bild von der URL über Google Drive API Javascript auf Google Drive hoch
Ich bin neu in Javascript und es tut mir leid, wenn Ihnen meine Frage lahm erscheint. Ich möchte ein Bild von meiner Website auf mein Google Drive hochladen. Ich habe den Teil Authentifizierung und Ordnererstellung erfolgreich implementiert, bin jedoch verwirrt über den Upload-Vorgang.
Angenommen, dies ist mein Code zum Erstellen eines Ordners in Google Drive:
function createFolder(folderName) {
var parentId = 'xxxxxxx';//some parentId of a folder under which to create the new folder
var fileMetadata = {
'name' : folderName,
'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);
uploadImage(file.id);
break;
default:
console.log('Error creating the folder, '+response);
break;
}
});
}
Jetzt möchte ich mein Bild von dieser URL hochladen: https://xxxxxx.comin den neu erstellten Ordner von Upper Response ( file.id)
Dies habe ich in der Google API-Dokumentation erhalten, aber wo soll ich meine URL einfügen / anhängen?
function uploadImage(folderId) {
var fileMetadata = {
'name': 'photo.jpg',
parents: [folderId]
};
var media = {
mimeType: 'image/jpeg',
body: fs.createReadStream('files/photo.jpg')
};
drive.files.create({
resource: fileMetadata,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.id);
}
});
}
Vielen Dank im Voraus.
Antworten
Ich glaube Ihr Ziel wie folgt.
- Sie möchten eine Datei von einer URL herunterladen und die heruntergeladene Datei mit Javascript auf Google Drive hochladen.
- In Ihrem Fall können Sie
gapi.clientdie Datei zum Hochladen auf Google Drive verwenden.
Änderungspunkte:
- In der aktuellen Phase scheint es leider
gapi.client.drive.files.createnicht möglich zu sein, die Anfrage einschließlich des Inhalts noch zu senden. Ref In diesem Fall möchte ich vorschlagen, diesfetchals Problemumgehung zu verwenden. BeifetchVerwendung können der Dateiinhalt und die Metadaten mit angefordert werdenmultipart/form-data. - In dieser Problemumgehung wird das Zugriffstoken von verwendet
gapi.client. Dieses Skript setzt also voraus, dass Siegapi.clientzum Hochladen der Datei verwendet werden können. Bitte seien Sie vorsichtig.
Geändertes Skript:
const url = "###"; // Please set the URL.
const fileName = "sample filename";
const folderId = "###"; // Please set the folder ID.
fetch(url).then(res => res.blob()).then(blob => {
const form = new FormData();
form.append('metadata', new Blob([JSON.stringify({name: fileName, parents: [folderId]})], {type: 'application/json'}));
form.append('file', blob);
fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', {
method: 'POST',
headers: new Headers({'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
body: form
}).then(res => res.json()).then(val => console.log(val));
});
Wenn Sie dieses Skript ausführen, wird das folgende Ergebnis in der Konsole angezeigt. (Wenn die URL der direkte Link der JPEG-Bilddatei ist.)
{ "kind": "drive#file", "id": "###", "name": "sample filename", "mimeType": "image/jpeg" }
Hinweis:
- In diesem Fall
uploadType=multipartwird verwendet. Die maximale Dateigröße beträgt also 5 MB. Bitte seien Sie vorsichtig. Wenn Sie mehr als 5 MB verwenden möchten, aktivieren Sie bitte Wiederaufnahme des Uploads. Ref
Verweise:
- Verwenden von Fetch
- Dateidaten hochladen
Hinzugefügt:
Um den mit CORS verbundenen Fehler als eine andere Methode zu vermeiden, möchte ich vorschlagen, die Web-Apps als Wrapper zu verwenden. In diesem Fall ist die Clientseite Javascript. Dieses Javascript kann außerhalb von Google verwendet werden.
Verwendung:
Bitte machen Sie den folgenden Ablauf.
1. Erstellen Sie ein neues Projekt von Google Apps Script.
Das Beispielskript für Web Apps ist ein Google Apps-Skript. Erstellen Sie daher bitte ein Projekt von Google Apps Script.
Wenn Sie es direkt erstellen möchten, greifen Sie bitte auf zu https://script.new/. In diesem Fall wird der Anmeldebildschirm geöffnet, wenn Sie nicht bei Google angemeldet sind. Melden Sie sich also bitte bei Google an. Auf diese Weise wird der Skripteditor von Google Apps Script geöffnet.
2. Bereiten Sie das Skript vor.
Bitte kopieren Sie das folgende Skript (Google Apps Script) und fügen Sie es in den Skripteditor ein. Dieses Skript ist für die Web Apps.
Serverseite: Google Apps ScriptDieses Skript wird für Web Apps verwendet. In diesem Fall werden die Web Apps als Wrapper verwendet.
function doGet(e) {
const imageUrl = e.parameter.imageUrl;
const res = UrlFetchApp.fetch(imageUrl);
if (res.getResponseCode() != 200) throw new Error("Image couldn't be retrieved.");
const blob = res.getBlob();
const file = DriveApp.getFolderById(e.parameter.folderId).createFile(blob.setName(e.parameter.filename));
const obj = {id: file.getId(), name: file.getName(), mimeType: file.getMimeType()};
return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
}
3. Stellen Sie Web Apps bereit.
- Öffnen Sie im Skripteditor ein Dialogfeld über "Veröffentlichen" -> "Als Web-App bereitstellen".
- Wählen Sie "Ich" für "App ausführen als:" .
- Auf diese Weise wird das Skript als Eigentümer ausgeführt.
- Wählen Sie "Jeder, auch anonym" für "Wer hat Zugriff auf die App:" .
- Klicken Sie auf die Schaltfläche "Bereitstellen" als neue "Projektversion".
- Öffnen Sie automatisch ein Dialogfeld mit dem Titel "Autorisierung erforderlich".
- Klicken Sie auf "Berechtigungen überprüfen".
- Wählen Sie ein eigenes Konto.
- Klicken Sie unter "Diese App wird nicht überprüft" auf "Erweitert".
- Klicken Sie auf "Gehe zu ### Projektname ### (unsicher)".
- Klicken Sie auf "Zulassen".
- OK klicken".
- Kopieren Sie die URL von Web Apps. Es ist wie
https://script.google.com/macros/s/###/exec.- Wenn Sie das Google Apps-Skript geändert haben, stellen Sie es bitte als neue Version erneut bereit. Dadurch wird das geänderte Skript in Web Apps wiedergegeben. Bitte seien Sie vorsichtig.
4. Laden Sie eine Datei von der Clientseite auf die Serverseite hoch.
Client-Seite: HTML & JavascriptStellen Sie die URL Ihrer Web Apps auf das folgende Skript ein. Bitte legen Sie den Dateinamen und die Ordner-ID fest.
const imageUrl = "###"; // Please set the URL of image.
const url = "https://script.google.com/macros/s/###/exec"; // Please set the URL of Web Apps.
const qs = new URLSearchParams({
imageUrl: imageUrl,
filename: "sample filename",
folderId: "###", // Please set folder ID.
});
fetch(`${url}?${qs}`).then((res) => res.json()).then(console.log).catch(console.log);
Ergebnis:
Wenn das obige Skript ausgeführt wird, wird der folgende Wert zurückgegeben. Sie können den zurückgegebenen Wert an der Konsole sehen.
{
"id": "###",
"name": "###",
"mimeType": "###"
}
Hinweis:
- Wenn Sie das Skript von Web Apps geändert haben, stellen Sie die Web Apps erneut als neue Version bereit. Auf diese Weise wird das neueste Skript in Web Apps wiedergegeben. Bitte seien Sie vorsichtig.
Verweise:
- Web Apps
- Nutzen Sie Web Apps mit Google Apps Script
Versuchen Sie, Ihre Fotodatei mit diesem Snippet hochzuladen:
// download file from website
const http = require('https')
const fs = require('fs')
let file = fs.createWriteStream('Photo001.jpg')
let request = http.get(
'https://ssl.gstatic.com/ui/v1/icons/mail/rfr/logo_gmail_lockup_default_2x.png',
(response) => {
response.pipe(file)
})
// upload file to Google Drive
let fileMetadata = {
'name' : 'Photo001',
'mimeType': 'image/jpeg'
}
let media = {
mimeType : 'image/jpeg',
body : fs.createReadStream('Photo001.jpeg')
}
function uploadFile(auth){
const drive = google.drive({version: 'v3', auth})
drive.files.create({
resource: fileMetadata,
media : media,
fields : 'id'
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err)
})
}
Dokumentation
- Dateien: erstellen