无法使用google drive sdk上传.doc文件

时间:2013-06-28 04:54:53

标签: php google-drive-api

我可以从我的应用上传.docx文件到谷歌驱动器,但当我尝试上传.doc文件时,出现此错误:

发生错误:调用POST https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&key=AIzaSyCm1WqPp05lBRjKSpxdtHjS8lz6WLeoWlU时出错:(400)提供的mime类型无效

当我上传.ppt .xls文件时,该错误也出现了。文档说我们可以在Google云端硬盘中存储任何MIME类型。这有什么不对?有人知道吗?

这是我的上传功能:

function insertFile($title, $description, $parentId, $mimeType, $filename) {

$file = new DriveFile();
$file->setTitle($title);
$file->setDescription($description);
$file->setMimeType($mimeType);

if ($parentId != null) {
  $parent = new ParentReference();
  $parent->setId($parentId);
  $file->setParents(array($parent));
}

try {
  $data = file_get_contents($filename);

  $createdFile = $this->service->files->insert($file, array(
    'data' => $data,
    'mimeType' => $mimeType,
  ));

  return $createdFile;
} catch (Exception $e) {
  print "An error occurred: " . $e->getMessage();
  }    
}

[更新]我正在使用CI,这是我在调用insertFile函数的控制器中的函数:

function upload() {
$title = $this->input->post('title');
        $description = $this->input->post('description');
        $parentId = $this->input->post('parentId');

        if ($_FILES["file"]["error"] > 0) {
            echo "Error: " . $_FILES["file"]["error"] . "<br>";
        } else {
            $driveHandler = new DriveHandler($_SESSION['credentials']);
            $driveHandler->BuildService($_SESSION['credentials']);
            $ext = substr(strrchr($_FILES["file"]["name"],'.'),1);        
            if($title === ""){
                $fileTitle = $_FILES["file"]["name"];                
            } else {
                $fileTitle = "$title.$ext";
            }
            $driveHandler->insertFile($fileTitle, $description, $parentId, $_FILES["file"]["type"], $_FILES["file"]["tmp_name"]);              
}

2 个答案:

答案 0 :(得分:0)

当我尝试将var_dump($mimeType)用于.docx文件时,结果为:

  

string(71)“application / vnd.openxmlformats-officedocument.wordprocessingml.document”

.doc文件:

  

string(20)“”application / msword“”

根据结果,我发现了问题。 $mimeType .doc文件中还有一个额外的双引号。所以我尝试改变我的代码:

  $data = file_get_contents($filename);
  $mime = str_replace('"', "", $mimeType);

  $createdFile = $this->service->files->insert($file, array(
    'data' => $data,
    'mimeType' => $mime,
  ));

它现在有效。

答案 1 :(得分:0)

您可以使用preg_replace()的正则表达式中的否定字符类替换任何非字母数字,/.字符,而不是仅替换双引号。

$mimeType = preg_replace("~[^a-zA-Z0-9/\.]*~", "", $mimeType);