我使用的是API_Alfresco,它是通過Apache Chemistry連接到Alfresco的庫,但當我嘗試使用空格創建文件夾時出現以下錯誤:創建帶空格的文件夾時Apache化學失敗
Uncaught CmisRuntimeException in C:\xampp\htdocs\API_Alfresco\cmis_repository_wrapper.php:176 Stack trace:
#0 C:\xampp\htdocs\API_Alfresco\cmis_repository_wrapper.php(207): CMISRepositoryWrapper->convertStatusCode(505, '')
#1 C:\xampp\htdocs\API_Alfresco\cmis_service.php(791): CMISRepositoryWrapper->doGet('...')
#2 C:\xampp\htdocs\API_Alfresco\APIAlfresco.php(98): CMISService->getObjectByPath('...', Array)
#3 C:\xampp\htdocs\phpCMISalfresco.php(33): APIAlfresco->setFolderByPath('...')
#4 {main} thrown in C:\xampp\htdocs\API_Alfresco
當我嘗試創建一個沒有空格的文件夾時,它工作正常。這裏是我的代碼:
<?php
require 'APIAlfresco/APIAlfresco.php';
include 'connectAlfresco.php';
$parent_name = $_POST['parent']; //FAILS IF IT HAS BLANK SPACES
$uploaded_file = basename($_FILES['att_file']['name']); //Uploaded
$base_folder = "/path/to/site/folder/"
if (move_uploaded_file($_FILES['att_file']['tmp_name'], $uploaded_file)) {
$conexion->setFolderByPath($base_folder); //Set base folder where files will be uploaded
/*Check if dir already exists and create it if it doesn't */
if($conexion->existsFolder($parent_name)) echo "Parent".$parent_name." already exists";
else $conexion->createFolder($parent_name);
/*Move uploaded file into folder */
$conexion->setFolderByPath($base_folder."/".$parent_name); //ERROR HERE IF $parent_name HAS BLANK SPACES
$conexion->uploadFile($uploaded_file);
}
echo 'File infor:';
print_r($_FILES);
?>
我接過來一看的錯誤跟蹤並意識到doRequest()內的doGet()(在cmis_repository_wrapper.php)呼叫在HTTP請求中返回一個錯誤(只有當文件夾包含空格時纔會失敗)。由於我沒有編碼圖書館,我似乎無法弄清楚會出現什麼問題。任何線索?它可能是一個錯誤?
也提出了一些調試和意識到doRequest()所花的URL,例如:
http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom/path?path=/Sites/mysite/documentLibrary/Folder WithBlankSpaces &濾波器= & includeAllowableActions = & includeACL = & includePolicyIds = & includeRelationships = & renditionFilter =
而在這個鏈接中,我注意到兩件事情可能觸發錯誤:
1) 「文件夾WithBlankSpaces」 文件夾被分裂在兩個URL(最有可能是實際問題)
2)瓦爾在url中的最後一部分是未設置
我懷疑1)可能是真正的問題,因爲如果我強制該文件夾沒有空格(調用str_replace(' ', '', $parent_folder)
),那麼它會正常工作。
我怎樣才能得到它與文件夾與空格?有什麼方法可以修改該URL,以便空格不會將它分爲兩部分?當然,如果用戶試圖創建「我的文件夾」,他想看到的是「我的文件夾」目錄,而不是「MyFolder」目錄。
在此先感謝!
這種行爲是正確的,在大多數系統中都是這樣做的。實際上,Windows是我使用的唯一操作系統,它在文件名中包含空格的地方非常微不足道。 將下劃線替換空格是解決您的問題?這樣,這些文件仍然可以與非Windows系統兼容。 – ksjohn
實際上,Apache Chemistry會自動刪除下劃線,所以像「my_folder」這樣的文件夾(或文件)將自動轉換爲「myfolder」。點是我看到分隔單詞的唯一合理方式,但我覺得它仍然是一個很好的解決方法。 –
你可以用它們的字符串表示中的「%20」替換它們......但是,如果你希望系統中的乾淨表示和空格都可用,我懷疑如果不使用自己的解決方案,就很容易滿足它。正如我所說的,大多數命名系統中禁止使用空格,因爲空格在命令中用作分隔符。 – ksjohn