嘿,伙计们抱怨格式错误,并为你的支持提供帮助。这次我会尝试更好地解释。 我在位置'C:\ xampp \ htdocs \ drupalTheme'上有一个名为Content_4_2.zip的zip文件。此zip包含2个xml文件。 现在,我要传递此zip的Web服务方法的定义如下。
<soap:Body>
<AddFileToProject xmlns="http://tempuri.org/">
<Ticket>string</Ticket>
<ProjectID>string</ProjectID>
<Filename>string</Filename>
<FileData>base64Binary</FileData>
<SourceLanguageID>string</SourceLanguageID>
<TargetLanguageIDs>
<string>string</string>
<string>string</string>
</TargetLanguageIDs>
<Metadata>
<Meta Name="string" Value="string" />
<Meta Name="string" Value="string" />
</Metadata>
<IsReferenceMaterial>boolean</IsReferenceMaterial>
</AddFileToProject>
</soap:Body>
FileData'base64Binary'是我要发送的内容,即zip文件。在Java中,我能够转换zip 将文件写入bytearray并成功调用Web服务。现在我知道PHP中没有这样的转换。 所以我的方法是 1.从目录中获取zip文件的名称 2.将zip的内容通过Web服务。
我试过这个:
$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip';
$zip = zip_open($zipFile);
$addFile = $ServicesLink->AddFileToProject(array('Ticket'=>$ticket,'ProjectID'=>$projectID,'Filename'=>$fileName,'FileData'=> $zip, 'SourceLanguageID'=> $srcLang, 'TargetLanguageIDs'=> $finalTarArray,'Metadata'=> null,'IsReferenceMaterial'=>false));
和这个appraoch
$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip';
$file = file_get_contents('./Content_4_2.zip',true);
$byteArr = str_split($file);
foreach ($byteArr as $key=>$val) { $byteArr[$key] = ord($val); }
$addFile = $ServicesLink->AddFileToProject(array('Ticket'=>$ticket,'ProjectID'=>$projectID,'Filename'=>$fileName,'FileData'=> $byteArr, 'SourceLanguageID'=> $srcLang, 'TargetLanguageIDs'=> $finalTarArray,'Metadata'=> null,'IsReferenceMaterial'=>false));
两者都会导致发送损坏的zip文件。
希望对您有同样的看法。
答案 0 :(得分:0)
使用PHP的ZIP功能:http://php.net/manual/en/ref.zip.php
本教程应该引导如何使用它的正确途径: http://www.timlinden.com/blog/website-development/unzip-files-with-php/
答案 1 :(得分:0)
假设您想要整体发送zip存档(即不提取它),正如您的第二个测试示例提示的那样,您可能想尝试跳过“字节数组”部分并使用base64_encode()来直接编码文件。使用您的示例代码,它看起来有点像这样:
$zipFile = 'C:/xampp/htdocs/drupalTheme/Content_4_2.zip';
$fileContent = file_get_contents($zipFile, true);
$fileEncoded = base64_encode($fileContent);
$addFile = $ServicesLink->AddFileToProject(
array(
'Ticket'=>$ticket,
'ProjectID'=>$projectID,
'Filename'=>$fileName,
'FileData'=> fileEncoded,
'SourceLanguageID'=> $srcLang,
'TargetLanguageIDs'=> $finalTarArray,
'Metadata'=> null,
'IsReferenceMaterial'=>false
)
);
答案 2 :(得分:0)
感谢您的帮助。我通过其他代码找到了我的解决方案 PHP SOAP Transfering Files .Jarrod的第一个答案是对我有用的。感谢支持人员