2012-11-18 107 views
0

我目前正在研究基于Adobes Scene7的web2print项目。打印产品的完整网址(pdf)非常长,并且超过了所有浏览器对网址长度的限制。因此,为了获得最终的印刷产品,我假设我必须通过POST方法以不同的方式提交网址。 似乎有两种方法:首先,使用html表单(method = post)并将所有url参数创建为(隐藏)输入字段。其次,用post创建一个ajax调用(例如jQuery.ajax)。通过POST避免URL长度限制

实际上,如果我打开浏览器中的打印网址,准备好的PDF文件将在浏览器中打开。所以我需要一种方法来通过POST发送非常长的URL到服务器并打开我从它得到的PDF。测试ajax版本我遇到同源策略并出现错误,因为我调用的URL不在本地服务器上。这必须是web2print项目的标准情况,这是如何处理的?

THX提前 Michbeck

回答

0

我解决了这个问题。我分两步做了。首先,我使用ajax将基本url和url参数发送到本地服务器上的php脚本。使用jQuery很容易完成:

jQuery.ajax({ 
    type : "POST", 
    url : './includes/php/userdata.php', 
    data: { method: 'get_print_version', 
      url: base_url,     
      parameter: query_parameter, 
      num: num_parameter }, 
    error: function(error) { 
     console.log("Print version failed"); 
    }, 
    success: function(reault) { 
    console.log("What is the result?"); 
    }   
});    

服务器脚本使用cURL将数据发送到最终服务器。因此,基URL和参数不会发布为一个url,而是通过使用CURLOPT_POST和CURLOPT_POSTFIELDS分开。可以使用file_put_contents将服务器响应(pdf)写入文件。如果PDF变大,您将在此处获得内存限制错误。将cURL的答案直接写入pdf文件最好。

if ($_method == 'get_print_version') 
{ 
    $url = $_REQUEST['url']; 
    $parameter = $_REQUEST['parameter']; 
    $num = $_REQUEST['num']; 

    $post = curl_init(); 

    curl_setopt($post, CURLOPT_URL, $url); 
    curl_setopt($post, CURLOPT_POST, $num); 
    curl_setopt($post, CURLOPT_POSTFIELDS, $parameter); 

    /* write calendar directly to file */ 
    $pdf = fopen('./Calendar.pdf', 'w'); 
    curl_setopt($post, CURLOPT_FILE, $pdf); 

    curl_exec($post); 
    curl_close($post);   

    echo $result;   
}