异步通过百会阿比

异步通过百会阿比

问题描述:

我正在写一个web应用程序,允许用户与Zoho CRM界面上载文件,百会提供的api这我使用。他们说,出于安全原因,不允许AJAX请求,但是我发现了一个解决方法,我向一个php文件发出AJAX请求,该文件使用cURL执行标准后置操作,并返回一个值,可以在我的jQuery ajax中获得“成功“的处理程序,这工作得很好。异步通过百会阿比

我遇到现在的问题是如何上传使用AJAX API的文件。我在网上对文件io的理解非常有限,我认为我知识上的差距阻碍了我解决这个问题。因为它不是简单的文本,而是通过我的AJAX调用传递的下拉输入,但是相反,我遇到了构建请求url的问题。该API说参数应该是“FileInputStream”,但我只发现存在于Java中。我想把所有东西放在PHP/JS的土地上。我真的不知道上传文件数据的位置,以及api的工作方式,它是否需要文件路径? BLOB?别的东西?

这里是我到目前为止 (主要HTML/PHP)

<div class="info_card" id="main-search"> 
<form id="myid" action="https://crm.zoho.com/crm/private/xml/Potentials/uploadFile?authtoken=AUTHTOKEN&scope=crmapi&id=ID" enctype="multipart/form-data" method="post"> 
<input type="file" id="fileInput" name="fileInput"> 
<input type="text" name="foo" id="foo" value="foofoo"> 
<button type="button" name="submit" id="ajaxSubmit">upload</button> 
</form> 
</div> 
<script type="text/javascript"> 
$(function() { 
    $("#ajaxSubmit").click(function() { 
     console.log('clicked:'); 
     var fd = new FormData(); 

     fd.append("fileInput", $("#fileInput")[0].files[0]); 
     fd.append("foo", $("foo")); 
     $.ajax({ 
      url: 'ajaxUpload.php', 
      type: 'POST', 
      cache: false, 
      data: fd, 
      processData: false, 
      contentType: false, 
      beforeSend: function() { 
       console.log(("Uploading, please wait....")); 
      }, 
      success: function (data) { 
       console.log(("Upload success.")); 
       console.log(data); 
      }, 
      complete: function() { 
       console.log(("upload complete.")); 
      }, 
      error: function() { 
       alert("ERROR in upload"); 
      } 
     }); 

    }); 
}); 
</script> 

(阿贾克斯处理PHP页面)

<?php 
require_once($_SERVER[DOCUMENT_ROOT]."/models/zohoFunctions.php"); 
$url = "https://crm.zoho.com/crm/private/json/Potentials/uploadFile"; 
$params = "authtoken=AUTHTOKEN&scope=crmapi&id=ID&content="; 
$params .= "@".$_FILES['fileInput']; 
echo $params."\n"; 
echo makeURLRequest($url, $params); 
?> 

(该功能被称为 “makeURLRequest”)

function makeURLRequest($url, $param){ 
    // Make the url request 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
} 

,如果我使用的格式,并把操作设置为基本URL塔文件上传作品就好t由zoho的api指定。

我也硬了一些网址,在调试的目的,我希望我所有的代码包含有助于展示一下我试图实现。

为“的authToken”和“ID”的值已替换为安全起见。

+0

看看这里第一:https://stackoverflow.com/questions/5392344/sending -multipart-formdata-with-jquery-ajax。我想知道“contentType:false”是否会成为问题。也许$(“#fileInput”)[0] .files [0]也是一个问题。看看他们如何处理它。我曾经有过类似的“旧的浏览器”解决方案的工作示例 –

+0

嘿嘿,谢谢,我能得到FORMDATA工作,所以我得到了$ _FILE数据从我的主页传递给Ajax处理页面。但是我遇到的问题是在api调用中提交数据(文件数据)。 API说参数应该是“FileInputStream”,但每次我尝试构造一个请求URL时,我的参数是无效的。我想我不明白在请求url中应该传递什么。 [API_documentation](HTTPS://www.zoho。com/crm/help/api/uploadfile.html) –

+0

您可能需要'“@”。$ _ FILES ['fileInput'] ['tmp_name']'。或者,您可以尝试发送[CURLFile](http://php.net/manual/en/curlfile.construct.php)对象。 –

感谢@PatrickQ我是能够解决的问题,

通过传递一个CURLFile对象在后数据字段“内容”我能得到的API快乐。在事物的ajax方面,我创建了一个FormData对象并将fileInput附加到它。这样,处理php文件的ajax能够使用$ _FILE superglobal来获取构建CURLFile对象所需的所有信息。


AJAX表单提交

// Form setup 
<form id="myid" action="ajaxUpload.php" enctype="multipart/form-data" method="post"> 
<input type="file" id="fileInput" name="fileInput"> 
<button type="submit" name="submit" id="formSubmit">upload</button> 
</form> 

// AJAX submit function 
$(function() { 
    $("#formSubmit").click(function (e) { 
     e.preventDefault(); 
     console.log('clicked:'); 
     var fd = new FormData(); 
     fd.append("fileInput", $("#fileInput")[0].files[0]); 
     $.ajax({ 
      url: 'ajaxUpload.php', 
      type: 'POST', 
      cache: false, 
      data: fd, 
      processData: false, 
      contentType: false, 
      beforeSend: function() { 
       console.log(("Uploading, please wait....")); 
      }, 
      success: function (data) { 
       console.log(("Upload success.")); 
       console.log(data); 
      }, 
      complete: function() { 
       console.log(("upload complete.")); 
      }, 
      error: function() { 
       alert("ERROR in upload"); 
      } 
     }); 
    }); 
}); 

AJAX行动PHP文件

<?php 
$file = $_FILES['fileInput']; 
// base url 
$url = "https://crm.zoho.com/crm/private/xml/Potentials/uploadFile"; 
$ch = curl_init(); 
$cfile = new CURLFile($file['tmp_name'],$file['type'],$file['name']); 
$param = array(
    'authtoken' => AUTHTOKEN, 
    'scope' => "crmapi", 
    'id' => ID, 
    'content' => $cfile 
); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 
?>