我可以从我的应用上传.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"]);
}
答案 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);