Средство просмотра документов Google возвращает 204 ответа, больше не работает, альтернативы?
ОБНОВЛЕНИЕ 2016-11-16 9:53 EST
Похоже, что многие люди все еще видят 204 ответа, хотя Google утверждает, что "исправил" проблему. Когда я сам тестировал загрузку документа 50 раз, 3 из них Google возвращал 204 ответа.
Посетите этот URL-адрес и оставьте комментарий о своем несчастье, чтобы мы наконец-то смогли заставить Google решить и устранить проблему раз и навсегда: https://productforums.google.com/forum/?utm_medium=email&utm_source=footer#!msg/документы/hmj39HMDP1M/SR2UdRUdAQAJ
ОБНОВЛЕНИЕ 2016-11-04 6:01 EST
Похоже, сервис снова работает! Спасибо Google Docs за решение этой проблемы и ответы на мои твиты. Надеюсь, это сработает и для всех вас.
ОБНОВЛЕНИЕ 2016-11-04 15:33 EST
На https://productforums.google.com/forum/#!msg/docs/hmj39HMDP1M/X6a8xJwLBQAJ было опубликовано обновление, которое, по-видимому, указывает на то, что поддержка службы может возвращаться, и/или возникла проблема на их конце, которая вызвала непредвиденные результаты. Оставайтесь в курсе. Смотрите комментарий сразу ниже:
![enter image description here]()
Оригинальное сообщение о переполнении стека начинается здесь
Наше веб-программное обеспечение использовало и полагалось на службу просмотра Google Docs для встраивания документов на наш веб-сайт (через iframe) и предоставления нашим клиентам возможности просматривать документы без необходимости открывать отдельные приложения (посредством посещения URL-адреса). Эта функция была предоставлена Google в течение достаточно долгого времени и работала отлично!
Пример просмотра URL:
https://docs.google.com/viewer?url=http://www.pdf995.com/samples/pdf.pdf
Однако мы начали замечать, что файлы, которые мы пытались загрузить, загружались очень редко. Сначала мы думали, что с их серверами возникла проблема, поэтому начали изучать ответы на заголовки, которые мы получали. В частности, мы отметили, что почти каждый сделанный запрос возвращал ответ 204 Нет содержимого. Очень редко мы получали 200 ответов.
Вот пример одного из 204 ответов, которые мы получили:
![enter image description here]()
Вот пример одного из 200 полученных нами ответов (очень редко):
![enter image description here]()
После этого я искал в Google 204 проблемы, связанные со службой Google Viewer. Я оказался на этой странице https://productforums.google.com/forum/#!msg/docs/hmj39HMDP1M/X6a8xJwLBQAJ, которая, кажется, указывает на то, что Google внезапно и внезапно прекратил работу службы. Вот скриншот этой дискуссии (на момент публикации).
![enter image description here]()
Учитывая тот факт, что гугл "эксперт" ответил человеку на подобный запрос; кажется, что они официально и полностью отказались от поддержки сервиса просмотра.
Мои вопросы следующие:
-
Кто-нибудь еще знает наверняка, прекратил ли Google официально свою поддержку сервиса Google Viewer?
-
Кто-нибудь знает об обновленном подобном продукте/услуге Google (возможно, Google Drive?), Который позволяет человеку делать то же самое, что и служба просмотра, упомянутая выше? В идеале мне нужен простой URL-адрес, где я могу ссылаться на внешний документ, который не обязательно должен существовать на сервере Google, но все еще может находиться на моем сервере.
-
Какие другие сопоставимые и бесплатные услуги вы можете предложить, чтобы разрешить мне встраивать документы, такие как документы Word, документы Excel, документы PowerPoint и PDF, в веб-сайт, который позволяет пользователю просматривать документы в браузере, не имея таких приложений? фактически установлен в их системе.
В заключение, я просто хочу сказать, что для всего хорошего Google делает это невероятно бесит, расстраивает и раздражает, что они могут предложить услугу, на которую люди рассчитывают в течение долгого времени, и внезапно отключают ее. Я уверен, что есть много других, кроме меня самого, которые никогда не будут беспокоиться по поводу такого решения. Google исправил проблему и все еще хорош в моей книге :-)
Заранее спасибо за ваши ответы!
Ответы
Ответ 1
Я запускаю службу, которая также полагается на внедрение Google Doc Viewer, и я также столкнулся с этой проблемой. Я не мог найти другого сопоставимого сервиса (бесплатно или иначе).
Я придумал "взломать", который поможет вам избежать использования Google Doc Viewer. Однако это требует JQuery. Я продолжаю обновлять iframe каждые 2 секунды, пока он, наконец, не загрузится правильно. Я также охватываю iframe загрузкой gif, чтобы скрыть постоянное обновление. Мой код:
<style>
.holds-the-iframe {
background:url(/img/loading.gif) center center no-repeat;
}
</style>
<div class="holds-the-iframe">
<iframe id="iframeID" name="iframeID" src="https://docs.google.com/viewerng/viewer?url=www.example.com&embedded=true"></iframe>
</div>
<script>
function reloadIFrame() {
document.getElementById("ifm").src=document.getElementById("iframeID").src;
}
timerId = setInterval("reloadIFrame();", 2000);
$( document ).ready(function() {
$('#iframeID').on('load', function() {
clearInterval(timerId);
console.log("Finally Loaded");
});
});
</script>
Ответ 2
Я использовал Google Viewer как средство просмотра копий для нашей внутренней системы управления, мы обычно загружаем только файлы PDF и изображений, так как решение "все-в-одном" было блестящим, работало по всем направлениям (мобильный, рабочий стол и т.д.)). Однако, когда он становится все более ненадежным, у меня есть творческий подход.
Мое решение состояло в том, чтобы сгенерировать и сохранить JPG-версию PDF, используя imagick, если она была просмотрена после ее загрузки. Вместо того, чтобы загружать все загруженные PDF файлы, они преобразуются только при их доступе.
Мое рассуждение:
- У меня очень небольшой пул пользователей, поэтому типы файлов легко управляются.
- Вероятность того, что каждый PDF должен быть просмотрен снова после загрузки, почти равен нулю, поэтому он создается только тогда, когда это необходимо для целей отчетности.
- Мне нужен надежный способ просмотра файла с помощью мобильных устройств. iOS и Android не очень хорошо смотрятся в браузерах просмотра PDF файлов, и каждый знает, как много затруднений PDF на устройстве iOS (iBooks кто-нибудь?)
После просмотра файла и версии JPG созданного pdf он используется вместо PDF, когда он просматривается пользователем. Не очень, но, безусловно, работает, я признаю, что есть элемент удвоения, но у меня нет ограничений на хранение. Исходный файл также не изменяется в любом случае, поэтому он также служит третичным удаленным резервным копированием. Это не по дизайну, а по счастливому совпадению.
Не стесняйтесь использовать приведенный ниже код, если он вам полезен. Есть, вероятно, более элегантные способы сделать это, но для моих целей и пользователей это нормально.
$_thumbnail = 'files/thumbnails/'.$_section.'/'.$_fileName.'.jpg';
if (!file_exists($_thumbnail)) {
$_file = 'files/'.$_section.'/'.$_fileName;
$imagePreview = new imagick();
$imagePreview->setResolution(300, 300);
$imagePreview->readimage($_file);
$imagePreview->setImageFormat( "jpg" );
$imagePreview->writeImage('files/thumbnails/'.$_section.'/'.$_fileName.'.jpg');
echo '<img src="/files/thumbnails/'.$_section.'/'.$_fileName.'.jpg" width="100%"/>';
} else {
echo '<img src="/files/thumbnails/'.$_section.'/'.$_fileName.'.jpg" width="100%"/>';
}
Ответ 3
Простое решение/взлома с Reactjs, хотя оно может быть легко реализовано в любой другой библиотеке/ваниле.
Используется с базовой концепцией: пытается загрузить - если onload выполнить, очистить интервал, в противном случае попробуйте загрузить снова каждые 3 секунды. отлично работает
(Я отредактировал свой собственный код, чтобы он содержал минимальный код, поэтому не тестировался)
var React = require ('response');
export default class IframeGoogleDocs extends React.Component {
constructor(props) {
super();
this.bindActions();
}
bindActions() {
this.updateIframeSrc = this.updateIframeSrc.bind(this);
this.iframeLoaded = this.iframeLoaded.bind(this);
}
iframeLoaded() {
clearInterval(this.iframeTimeoutId);
}
getIframeLink() {
return `https://docs.google.com/gview?url=${this.props.url}`; // no need for this if thats not dynamic
}
updateIframeSrc() {
this.refs.iframe.src = this.getIframeLink();
}
componentDidMount() {
this.iframeTimeoutId = setInterval(
this.updateIframeSrc, 1000 * 3
);
}
render() {
return (
<iframe onLoad={this.iframeLoaded} onError={this.updateIframeSrc} ref="iframe" src={this.getIframeLink()}></iframe>
);
}
}
Ответ 4
Я решил эту проблему следующим образом. Если Google Viewer не загружен, перезапустите iframe.
function reloadIFrame() {
var iframe = document.getElementById("iFrame");
console.log(frame.contentDocument.URL); //work control
if(iframe.contentDocument.URL == "about:blank"){
iframe.src = iframe.src;
}
}
var timerId = setInterval("reloadIFrame();", 2000);
$( document ).ready(function() {
$('#menuiFrame').on('load', function() {
clearInterval(timerId);
console.log("Finally Loaded"); //work control
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<iframe id="iFrame" src="https://docs.google.com/gview?url=http://ruski.354group.com/media/menu_ruski_v115.pdf?entryPoint=projectimage&id=1bef4781-5eb5-60b0-8f0b-5426c9877ebe&type=apoll_Web_Project_Files&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe>