Средство просмотра документов 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

Учитывая тот факт, что гугл "эксперт" ответил человеку на подобный запрос; кажется, что они официально и полностью отказались от поддержки сервиса просмотра.

Мои вопросы следующие:

  1. Кто-нибудь еще знает наверняка, прекратил ли Google официально свою поддержку сервиса Google Viewer?

  2. Кто-нибудь знает об обновленном подобном продукте/услуге Google (возможно, Google Drive?), Который позволяет человеку делать то же самое, что и служба просмотра, упомянутая выше? В идеале мне нужен простой URL-адрес, где я могу ссылаться на внешний документ, который не обязательно должен существовать на сервере Google, но все еще может находиться на моем сервере.

  3. Какие другие сопоставимые и бесплатные услуги вы можете предложить, чтобы разрешить мне встраивать документы, такие как документы 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>