2013-10-07 1 views
0

이 생깁니다. 따라서 경력 신청서를 webservice로 보내고 양식에있는 다른 요소와 함께 파일을 hr 부서에 전자 메일로 보내는 코드가 있습니다. 파일을 제외한 모든 파트가 원하는대로 전자 메일로 전송됩니다. 파일이 손상되지 않고 서버에 업로드됩니다. 그러나 결과 전자 메일 첨부 파일이 손상됩니다.cURL을 사용하여 webservice에 XML로 파일을 보내면

문제는 다음과 같습니다. 파일은 EOF에 도달하기 전에 갑자기 종료됩니다. 텍스트 파일 편집기에서 원본 크기의 파일과 축소 된 크기의 파일을 모두 열면 pdf 파일이라고 가정 해 봅시다. 시작 부분이 갑자기 끝날 때까지 동일하다는 것을 알 수 있습니다. 그 중 하나는 약 1MB이고 손상된 것은 약 600kB입니다.

결과로 손상된 파일보다 작은 파일 (4kB)을 보내려고했지만 그 파일도 같은 방식으로 손상됩니다. 결과 파일은 약 1kB입니다.

내가 할 XML 응답은 말한다 : 나는 테스트 목적으로 만 파일 업로드와 작은 양식을 준비했습니다

<RESULT>Invalid length for a Base-64 char array or string.</RESULT> 

: 그것은 관심의이 부분

<?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> 

.

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라는 기능이 메시지의 나머지와 함께 작동 : 여기

<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 코드입니다 : 여기

는 HTML입니다. = "문자 AHFAY3453GAW // LONG 임의의 문자열 // == 항상 두 가지로 끝처럼 보이는 사이의 문자열로 읽어

<?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; 

     } 

     ?> 

파일 : 그래서 그것은 문제가 될 수 있지만, 여기에 코드입니다하지 않을 수 있습니다 = "그 의미가 있다면 표지판. 파일이 C# 코드와 OK 업로드 얻을로

정말 난처한 상황에 빠진 오전 :

그것과 거의 동일합니다
 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 버전입니다.

답변

0

나는 이것을 꽤 오래 전에 알아 냈지만 답을 쓰는 것만으로 끝났다.

그래서 문제는 문자열의 "+"기호가 공백으로 대체되었습니다.

이 비트는 책임 :

$rawdata = file_get_contents($target); 
$data = urldecode($rawdata); 
$data = base64_encode($rawdata); 

나는이 그것을 변경 :

$rawdata = file_get_contents($_FILES['uploadedfile']['tmp_name']); 
$data = base64_encode($rawdata); 
$data = urlencode($data); 

는 이제 작동합니다.

관련 문제