使用Google Drive API下载的文件已损坏?使用服务帐户

File downloaded with Google Drive API corrupt? Using service Account

提问人:Pieter 提问时间:10/28/2023 更新时间:10/28/2023 访问量:29

问:

我有一个表单并将文件上传到 Google 云端硬盘,如下所示 (php):

            $fileMetadata = new Google\Service\Drive\DriveFile(
                array(
                    'name' => $bestandsnaamInDoelmap,
                    'mimeType' => mime_content_type($file_tmp),
                    'parents' => array($bovenliggendeMapId),
                )
            );
            try {
                $content = file_get_contents($file_tmp);
                $file = $service->files->create(
                    $fileMetadata,
                    array(
                        'data' => $content,
                        'mimeType' => mime_content_type($file_tmp),
                        'uploadType' => 'multipart'
                    )
                );
            } catch (Exception $e) {
                return "Fout in aanmaken bestand: " . $e->getMessage();
            }

然后我尝试使用以下命令下载文件:

try {
        return $service->files->get($fileId, array('alt' => 'media'));
    } catch (Exception $e) {
        return "Fout in zoeken naar bestand " . $fileId . ": " . $e->getMessage();
    }

我检查了发送到驱动器的文件中的文件大小和返回的文件大小:是相同的。 上传下载的文件也显示相同的大小,但

当我有一个带有文本“small”的小文本文件时,它会打开并显示文本“sm”。

对于二进制文件(pdf/jpg/png 等),下载的文件已损坏。

对于下载,我在 PHP 中使用:

    // Haal het bestand op met behulp van de fileID
    $response = get_file($downloadfileId);

    $fileContent = $response->getBody()->getContents();

    header('Content-Description: File Transfer');
    header('Content-Type: ' . $mimeType);
    header('Content-Disposition: attachment; filename="' . $fileName . '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . strlen($fileContent)));
    
    // Stuur de gegevens naar de browser
    echo $fileContent;

    exit;

这里出了什么问题?如果我在上面的示例中将 3 添加到 strlen($fileContent),则文本文件显示“小”。对于没有帮助的二进制文件。

希望有人能帮助我。

使用 Google 云端硬盘 API 将文件上传到云端硬盘(使用服务帐号从网站)

从网站再次下载文件。

这一切都在带有 PHP 8.1 和 PHP 8.1 谷歌驱动器 API 的 Joomla 网站上。

文件应该是相等的,而不是损坏的。

文件 下载 google-drive-api 损坏

评论

0赞 Linda Lawton - DaImTo 10/28/2023
检查您的 MIME 类型
0赞 Pieter 10/28/2023
拟态类型是正确的。屏幕上也显示例如:Kredietformulier (3).xlsx <Download bestand> <Verwijder bestand> (mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) 当单击<下载bestand>时,get 文件完成,然后是“for downloading i Use in PHP”示例。我尝试了很多其他选项,也通过 Javascript new Blob 和可点击的 href,但也失败了。然后,创建新的 Blob([$fileContent]) 将失败 (SyntaxError)。
0赞 Pieter 10/28/2023
您好,我刚刚发现了问题。php脚本中包含一个文件,该文件已经将某些内容写入了网站页面。所以整个页面都被下载了,包括 style/css。在得到$response后,我现在也使用了一点不同的编码:(对不起,代码样式错误)$headers = $response->getHeaders();foreach ($headers as $name => $values) { header($name .': ' .内爆(', ', $values));} header('Content-Disposition: attachment; filename=“' . $fileName .'"');回声 $response->getBody()->getContents();退出;

答: 暂无答案