6

UPDATE 2016年11月16日上午9时53 EST谷歌文档查看器返回204响应,不再工作,替代品?

看来很多人仍然看到,尽管谷歌宣称已经“固定”的问题204级的响应。当我自己测试50次文档的加载时,其中3次Google返回了204响应。

请访问此网址,并发布你的不快的评论,让我们终于可以得到谷歌解决,一旦解决了问题,并为所有:https://productforums.google.com/forum/?utm_medium=email&utm_source=footer#!msg/docs/hmj39HMDP1M/SR2UdRUdAQAJ

UPDATE 2016年11月4日下午6:01 EST

它看起来像服务起来,再次工作!感谢Google文档解决问题并回复我的推文。希望它也适用于你们所有人。

UPDATE 2016年11月4日下午3:33 EST

有这似乎表明对服务支持可能会返回和/或有自己的结束造成的问题发布到https://productforums.google.com/forum/#!msg/docs/hmj39HMDP1M/X6a8xJwLBQAJ更新意想不到的结果。敬请关注。见下面评论:

enter image description here

原贴堆栈溢出从这里开始

使用我们的网络软件,并且依赖于谷歌文档查看器服务嵌入文件到我们的网站(通过IFRAME)和让我们的客户能够查看文档而无需打开单独的应用程序(通过访问URL)。此功能由Google提供了相当长的一段时间,并且完美无缺!

例观众网址:

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搜索了与Google查看器服务相关的204个问题。我结束了这个页面https://productforums.google.com/forum/#!msg/docs/hmj39HMDP1M/X6a8xJwLBQAJ,这似乎表明谷歌突然和突然中止服务。以下是该讨论的截图(截至本文发稿时)。

enter image description here

鉴于谷歌的“专家”回答人的类似调查的事实;看起来他们已经正式放弃了对观众服务的支持。

我的问题有以下几点:

  1. 没有任何人确切地知道谷歌是否正式结束了它的支持谷歌浏览器服务?

  2. 有谁知道更新过的类似Google产品/服务(也许是Google Drive?),它允许一个人完成与上面提到的查看器服务完全相同的功能吗?理想情况下,我想要一个简单的URL,以便我可以引用外部文档,该文档不必存在于Google服务器上,但仍可驻留在我的服务器上。

  3. 什么是一些其他类似的和免费服务,你可以建议让我来嵌入文档,如Word文档,Excel电子文档,PowerPoint演示文档和PDF文件到一个网站,让用户查看内的文件浏览器,而不必让这些应用程序实际安装在他们的系统上。

最后一点,我只想说,对于所有的好谷歌确实是令人难以置信的真气,令人沮丧,恼人的,他们可以提供人们依靠长一段时间,突然拉服务插上它。我相信除了我自己之外,还有很多其他人不会对这种决定表达担忧。 谷歌纠正了这个问题,并在我的书中仍然不错:-)

感谢您提前回答您的答案!

+1

值得注意的是,Google从未将此作为开发者的服务提供,并且它不是官方和受支持的API的一部分。找到有效的终端与谷歌提供服务不一样,建立在不受支持的终端上会带来风险。 –

+0

够公平的。然而,他们默认了成千上万的人依靠该服务并将其整合到他们的应用程序中。 –

+0

除此之外,微软还提供类似的服务并积极推广:https://products.office.com/en-US/office-online/view-office-documents-online。这对Google的服务来说是一种劣质产品,因为它不支持PDF渲染。我根本没有看到谷歌会关闭它的任何理由。它只会把人们推向竞争对手的服务。我很乐意支付每月费用以继续使用Google的。 –

回答

4

我运行的服务也依赖于嵌入Google Doc Viewer,我也遇到过这个问题。我找不到任何其他类似的服务(免费或其他)。

我想出了一个'黑客',可以帮助您摆脱使用Google文档查看器。它确实需要JQuery。我所做的是每2秒钟刷新一次iframe,直到它最终正确加载。我还用加载gif来覆盖iframe,以隐藏持续刷新。我的代码:

<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> 
+0

我想过要做类似的事情。但是,这种解决方案的加载时间会更长,并且由于他们表示将逐步淘汰,因此未来也无法保证可以正常工作。我完全被难住了,为什么他们会关闭它知道人们使用它。这并不适用于我,但有很多Wordpress插件使用它,所以我确信很多网站都受到了影响。 –

+2

我同意,这很烦人。另一个“解决方案”是使用Microsoft等效的“https://view.officeapps.live.com/op/embed.aspx?src= [OFFICE_FILE_URL]”(仅适用于Office文档)来显示DOC和DOCX文件和类似PDF.JS来处理PDF文件。或者将所有文件转换为PDF并使用PDF.JS. – Cellydy

+1

谢谢。我看到了微软的等价物,但也指出它无法呈现PDF。 Google Viewer非常完美。我在GoogleDocs和jrochelle上发了推文,要求解释并鼓励他们给我们提供服务。也许如果他们看到足够的愤怒,他们会考虑扭转他们的过程。 –

0

我使用谷歌浏览器的副本观众对我们的内部管理制度,我们一般只能上传PDF文件和图像文件,所以作为所有功能于一身的解决方案是辉煌的,跨越工作董事会(移动,桌面等)。然而,随着它变得越来越不可靠,我变得富有创意。

我的解决方案是使用imagick生成并保存JPG版本的PDF,如果在上传后查看它的话。而不是批量处理所有上传的PDF文件,只在访问它们时才进行转换。

我的推理是:

  1. 我有一个非常小的用户池,以便文件类型易于管理
  2. 每一个PDF需要再次观看后上传几乎为零的可能性,所以它的仅在需要报告时才创建。
  3. 我需要通过移动设备查看文件的可靠方式。 iOS和Android在浏览器PDF阅读器中播放不好,每个人都知道有多少PDF在iOS设备上(iBooks任何人?)

一旦文件被查看并且创建了pdf版本的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%"/>'; 

      } 
0

一个简单的解决方案/黑客与Reactjs,虽然可以很容易地实现任何其他图书馆/香草。

与基本概念一起使用:尝试加载 - 如果加载完成,则清除间隔,否则尝试每3秒再次加载一次。完美的作品

(我已经编辑自己的代码,以便它包含最少的代码,所以未测试)

VAR阵营=需要(“反应”);

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> 
     ); 
    } 
}