1

我在使用 Google Docs 和 Zend Framework 1.11.4 时遇到问题。

我正在尝试做的是将文档上传到 Google Docs,检索 HTML 内容并删除文档。我正在处理 .doc、.pdf 和 .rtf 文件。

到目前为止我的代码:

$client = Zend_Gdata_ClientLogin::getHttpClient(
    'my@googleDocsEmail.address', 
    'MyPassword', 
    Zend_Gdata_Docs::AUTH_SERVICE_NAME
);
$gdClient = new Zend_Gdata_Docs($client);

$newDocumentEntry = $gdClient->uploadFile(
    $file, 
    null, 
    null, 
    Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI
);

$cv = file_get_contents($newDocumentEntry->getContent()->getSrc());

$newDocumentEntry->delete();

在调用 ->delete() 方法之前一切正常,它返回异常预期响应代码 200,得到 409

我已经在谷歌上搜索了几天,但找不到答案,根据谷歌的文档,这是删除文档的正确方法。

如果有人对我做错了什么有任何想法,那么任何帮助都会非常受欢迎。

非常感谢,加里

4

1 回答 1

0

使用 Zend_Gdata_Calendar 库时,我遇到了同样的 409 响应问题。Zend 框架 bugtracker 上有一个未解决的错误。请参阅http://zendframework.com/issues/browse/ZF-10194

这似乎归结为缺少由 Gdata_App 类或链中的子类之一设置的“If-Match”标头。

为了为日历 API 修复它,我重写了 Zend_Gdata_Calendar 类并实例化了我的类而不是那个类:

class Zend_Gdata_Calendar_Fixed extends \Zend_Gdata_Calendar {
    /**
     * Overridden to fix an issue with the HTTP request/response for deleting.
     * @link http://zendframework.com/issues/browse/ZF-10194
     */
    public function prepareRequest($method,
                                   $url = null,
                                   $headers = array(),
                                   $data = null,
                                   $contentTypeOverride = null) {
        $request = parent::prepareRequest($method, $url, $headers, $data, $contentTypeOverride);

        if($request['method'] == 'DELETE') {
            // Default to any
            $request['headers']['If-Match'] = '*';

            if($data instanceof \Zend_Gdata_App_MediaSource) {
                $rawData = $data->encode();
                if(isset($rawData->etag) && $rawData->etag != '') {
                    // Set specific match
                    $request['headers']['If-Match'] = $rawData->etag;
                }
            }
        }
        return $request;
    }
}

然后使用它:

...
$gdata = new Zend_Gdata_Calendar_Fixed($httpClient);
...

我想你可以做同样的事情,但要覆盖 Zend_Gdata_Docs 类。

于 2011-11-15T09:16:52.810 回答