当前位置: 首页 > 知识库问答 >
问题:

只有14字节被上传到谷歌云存储

锺星洲
2023-03-14

我试图使用PHP将一些文件上传到谷歌云存储。它似乎部分工作,因为我看到了网络控制台中的文件,但是我注意到所有文件的大小只有14个字节,而原始文件要大得多。

这是我正在使用的代码

/**
 *
 */
public static function saveFile($originalFile, $newFilename) {

    $bucket = MyStorage::getBucket();

    if ($bucket == null) {

        // Save locally
        Storage::disk('local')->put(FileController::$FILE_DIR . $newFilename, file_get_contents($originalFile));

    } else {

        // Save to Google Cloud Platform
        $bucket->upload($originalFile->getRealPath(), ['name' => $newFilename]);

    }
}

/**
 *
 */
private static function getBucket() {

    $appEnv = getenv('APP_ENV');

    if ($appEnv == "production" || $appEnv == "test") {

        $GOOGLE_CLOUD_PROJECT_ID = getenv('GOOGLE_PROJECT_ID');
        $GOOGLE_CLOUD_BUCKET_NAME = getenv('GOOGLE_BUCKET_NAME');

        $storage = new StorageClient(['projectId' => $GOOGLE_CLOUD_PROJECT_ID]);
        $bucket = $storage->bucket($GOOGLE_CLOUD_BUCKET_NAME);

        return $bucket;

    } else {

        return null;
    }
}

$originalFile-

知道会发生什么吗?


共有3个答案

乐正锦
2023-03-14
else {

    // Save to Google Cloud Platform
    $bucket->upload($originalFile->getRealPath(), ['name' => $newFilename]);

}

应该是:

else {

    // Save to Google Cloud Platform
    $bucket->upload(fopen($originalFile->getRealPath(), 'rb'), ['name' => $newFilename]);

    if( fclose($originalFile->getRealPath()) === false){
       // Success
    } else{
       // Failure
    }


}

你的代码不起作用的原因是你只上传了文件名到谷歌云。“/tmp/asdfasd”是14个字符。

下面是一个关于为什么“b”对fopen命令很重要的答案。

fclo关闭资源,防止数据泄漏。另外,检查fclo()的返回值,因为有些操作系统只刷新文件输出。检查返回值可以避免严重的数据泄漏。

高豪
2023-03-14

是的,对于使用文件上传,您需要读取字节流才能将其发送到远程云。fopen将为您完成这项工作,以创建字节流。

益明朗
2023-03-14

似乎您只是将路径作为字符串上传到文件,而不是实际的文件。

如果你看看客户端库,他们似乎使用fopen

$bucket-

 类似资料:
  • 我应该做什么才能成功上传图片?任何帮助都将不胜感激。 非常感谢。

  • 追踪下面。 相关的Python片段: 最终触发(从ssl库): 溢出错误:字符串长度超过2147483647字节 我想我缺少一些特殊的配置选项? 这可能与这名1.5岁的年轻人有关,显然他还没有解决问题:https://github.com/googledatalab/datalab/issues/784. 谢谢你的帮助! 完整跟踪: [File”/usr/src/app/gcloud/downlo

  • 我想按照官方文档中提供的示例将一个文件上传到Google云存储 然而,我得到了一个错误: 线程“main”com.google.cloud.storage.StorageException中的异常:获取服务帐户的访问令牌时出错:400个错误请求{“错误”:“无效的授予”、“错误描述”:“无效的JWT:令牌必须是短期令牌(60分钟)并且在合理的时间范围内。请检查JWT声明中的iat和exp值。”位于

  • 我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。

  • 我正在尝试使用谷歌云存储JSON API将图像上传到谷歌云存储桶中。文件正在上载,但没有显示任何内容。 我正在通过以下方式上载图像:- 图像1 看图片1,文件上传成功。但当我点击它查看它时,它显示如图2所示。 图像2

  • 在谷歌云存储中,我在名为图像的根桶中有一个名为猫的桶。我正在使用google-api-ruby-Client gem上传文件。我可以将文件上传到根桶“图像”,但上传到“图像/猫”不起作用。我知道谷歌云存储中的存储桶没有斜杠的概念,所以我无法弄清楚如何指定嵌套存储桶的名称。 这给出了nil:NilClass的错误