Apache ChemistryでAlfrescoに接続するライブラリAPI_Alfrescoを使用していますが、空白のフォルダを作成しようとすると次のエラーが発生します。空白のフォルダを作成するとApache Chemistryが失敗する
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);
?>
私はエラートレースに見ていたし、(cmis_repository_wrapper.php中)のdoGet()内部doRequest()呼び出しは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 =
このリンクでは、エラーを引き起こす可能性のある2つのことがわかります:
1) "フォルダWithBlankSpaces" フォルダには、実際の問題である可能性が最も高い2内のURL()
2)URLの最後の部分でバールの設定が解除されているが分割されて
私は1)が本当の問題かもしれないと思っています。なぜなら、そのフォルダに空白が無ければ(それはstr_replace(' ', '', $parent_folder)
と呼ばれます)、うまくいくからです。
との空白を使用するにはどうすればできますか?空白が2つに分割されないように、そのURLを変更する方法はありますか?もちろん、ユーザーが "My Folder"を作成しようとすると、 "My Folder"ディレクトリではなく "MyFolder"ディレクトリになります。
ありがとうございます!
この動作は正しいものであり、ほとんどのシステムで行われている動作です。 実際、ファイル名にスペースを入れるのは些細なので、私が使った唯一のオペレーティングシステムはWindowsです。 スペースをアンダースコアに置き換えると、問題の解決策になりますか?つまり、これらのファイルはWindows以外のシステムと互換性があります。 – ksjohn
実際にApache Chemistryはアンダースコアを自動的に削除して、 "my_folder"のようなフォルダ(またはファイル)を自動的に "myfolder"に変換します。単語を区切るためにドットが唯一の合理的な方法ですが、それでも解決策はかなり残っていると感じています。 –
文字列表現で "%20"と置き換えることもできます...しかし、システム内のクリーン表現と空きスペースの両方を利用できるようにするには、自分の解決策を逸脱することなく簡単に満足できるとは思えません。私が言ったように、スペースはコマンドのセパレータとして使われるので、ほとんどの命名システムで禁止されています。 – ksjohn