因此,我有一些代碼將職業應用程序發送到web服務,然後將該文件作爲附件通過電子郵件發送到hr部門,以及表單中的其他元素。除文件外的所有部分都會根據需要通過電子郵件發送。文件被上傳到服務器而不被損壞。但最終的電子郵件附件最終被損壞。使用cURL將文件發送到帶有XML的web服務會破壞它
問題是;該文件在到達EOF之前突然結束。假設我在文本編輯器中打開原始文件和縮小文件時,它是一個pdf文件,我發現開頭是相同的,直到其中一個突然結束。其中一個大約是1MB,而另一個大約是600kB。
我已經嘗試發送文件小於(4kB)比結果損壞的文件,但該文件也以相同的方式損壞。結果文件大約爲1KB。
XML響應我得到說:
<?xml version="1.0" encoding="utf-8"?><SENDEMLRSP><RTCD>1</RTCD><EXP>OK</EXP><RSP_LIST><RSP><MSGID>0</MSGID><EID /><RESULT>Invalid length for a Base-64 char array or string.</RESULT></RSP></RSP_LIST></SENDEMLRSP>
正是這一部分是感興趣:
<RESULT>Invalid length for a Base-64 char array or string.</RESULT>
我已經準備了一個小的形式僅用於測試目的的文件上傳。
下面是HTML:
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
下面是相關PHP代碼:
if(isset($_FILES['file']['name']))
{
echo ($_FILES['file']['name']);
echo ($_FILES['file']['tmp_name']);
$target = $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $target);
$rawdata = file_get_contents($target);
$data = urldecode($rawdata);
$data = base64_encode($rawdata);
//error_log('uploadconvertscope');
$iletisimrcpt = '<RCPT>
<TA>[email protected]</TA>
<MSG>kgsg</MSG>
<SBJ>'. strlen($rawdata).'</SBJ>
<OBOE>'.OBOE.'</OBOE>
<OBON>'.OBON.'</OBON>
<ATT_LIST><ATT><FN>'.$_FILES['file']['name'].'</FN><DATA>'.$data.'</DATA></ATT></ATT_LIST>
</RCPT>';
$request = '<?xml version="1.0" encoding="utf-8"?>
<SENDEML>
<VERSION>1.0</VERSION>
<TOKEN>'.$token.'</TOKEN>
<JID>'.JOBID.'</JID>
<MSG>Kariyar Basvuru isteði baþarýyla yerleþtirildi.</MSG>
<SBJ>Kariyar Basvuru</SBJ>
<RCPT_LIST>
'.$iletisimrcpt.'
</RCPT_LIST>
</SENDEML>';
error_log($request);
$params = array('data' => $request);
$response = processRequest(EML_URL, $params);
error_log($response);
$xml = new SimpleXmlElement($response);
}
中的processRequest功能的工作原理與消息的其餘部分。因此,它可能不是問題,但這裏是代碼:
<?php
function processRequest($url, $params) {
if(!is_array($params))
return false;
$post_params = "";
foreach($params as $key => $val) {
$post_params .= $post_params?"&":"";
$post_params .= $key."=".$val;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_HEADER, false); // 'true', for developer testing purpose
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
$data = curl_exec($ch);
if(curl_errno($ch))
print curl_error($ch);
else
curl_close($ch);
return $data;
}
?>
文件時的模樣性狀AHFAY3453GAW //長隨機數序列// ==它總是與兩端之間的串讀「= =「標誌,如果這意味着什麼。
我真的難倒的文件遭到上傳與此C#代碼確定:
byte[] attach1 = File.ReadAllBytes(@"C:\Users\user\Downloads\amb.pdf");
string attach = Convert.ToBase64String(attach1);
EmlRequest.SetConnectionInformation("someapi.com", "admin", "password");
EmlRequest eml=new EmlRequest(){ MessageJobId="DASFA1SDFAWEFA4X2==" };
eml.Recipients.Add(new ApiEmlRecipient() { TargetAddress = "[email protected]" ,ToName="name",Message="xxx",Subject="subject"});
eml.Recipients[0].Attachments.Add(new ApiEmlAttachment() { FileName = "abm.pdf", Data = attach });
eml.Send();
這幾乎等同於它的PHP版本。