2014-11-30 1 views
0

ОБНОВЛЕНИЕ: Я нашел решение. Это не обязательно касается каждого случая, поэтому я оставлю вопрос открытым на короткое время, если кто-то может просветить меня больше. Я решил, изменив формат URL: Google Drive позволяет этот формат для загрузки файлов:Невозможно загрузить ссылки для загрузки в скрипте Google Apps

https://docs.google.com/uc?export=download&id=FILE_ID

Так что я не знаю, если это является проблемой для другой URL,; и на самом деле точно, почему .getDownloadUrl() не работает ... может быть, кто-то может объяснить. Но сейчас это, кажется, работает в браузерах, которые я могу проверить ...


У меня есть простой WebAPP скрипт, который я бегу на сайт Google, добавив гаджет Apps Script. Гаджет работает точно так, как в примере форм на:

https://developers.google.com/apps-script/guides/html/communication#forms

гаджет предназначен для выполнения следующих действий: при загрузке страницы, форма возвращается, и пользователь должен ввести лицензионный ключ, чтобы получить ссылка для загрузки продукта. Мой код служит форме ОК и получает форму submit OK; и затем проверяет ключ, и, если он действителен, отправляет обратно ссылку для загрузки. Все это прекрасно работает; и проблема в том, что независимо от того, что я пытаюсь вернуть для ссылки для загрузки, оболочка caja iframe предотвращает щелчок по ссылке из фактической загрузки файла.

Мой предпочитаемый URL для возврата фактически через Drive API: файл загрузки на Google Диске, и я получаю ссылку скачать как так:

DriveApp.getFileById (downloadFileId) .getDownloadUrl()

Но когда щелкнула обратная ссылка, внутри cama iframe, сгенерированного для гаджета WebApp, ничего не происходит. Я попробовал несколько других форматов URL, указывающих на этот файл на Диске, но ничего не работает для загрузки.

Возможно ли это?

+0

Как отобразить ссылку для скачивания? Какой HTML-код для него создан? Можете ли вы добавить соответствующий код из своего приложения, которое генерирует и возвращает/отображает ссылку на ваш вопрос?Проблема может быть в том, как и/или где вы показываете ссылку, а не с ссылкой, возвращаемой 'getDownloadUrl()'. Что произойдет, если ваша копия и вставка ссылки на новую вкладку браузера? Загружает ли файл тогда? – azawaza

ответ

1

.getDownloadUrl() метод возвращает временный URL, который может быть использован для загрузки файла. Этот URL-адрес действителен только в течение короткого периода времени, после которого он истекает и больше не возвращает файл - возможно, поэтому ссылки в вашем веб-приложении не работают. Не могу точно помнить, как долго действителен URL, но я думаю, что это может быть всего 5 минут.

URL постоянной загрузки сохраняется в другом файле: webContentLink. Однако это свойство пока недоступно через Службу Google Apps Drive - для доступа к нему вы должны использовать Advanced Drive Service. You can enable Drive API under Advanced Google services in your script. После того, как он включен, вы можете использовать его так:

var file = Drive.Files.get(FILE_ID_HERE); 
var dlUrl = file.webContentLink; 

Это возвращает ссылку так же, как тот, который вы нашли и размещен в вашем обновлении. Преимущество использования API-интерфейса Drive для получения ссылки, а не жесткого кодирования, заключается в том, что если Google когда-либо изменяет формат этого URL-адреса, ваш код с использованием Drive API для получения ссылки будет продолжать работать, а жестко закодированные ссылки не будет.

Ссылка на полный привод Web API (что используется Advanced Drive Service) на https://developers.google.com/drive/v2/reference/.