如何使用RESTFUL cakePHP 2.3下载文件

gojuced7  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(144)

我正在使用CakePHP 2.3,我有两个应用程序在两个不同的服务器上。我需要使用REST从第一个服务器下载一个文件。我已经使我的应用程序成为RestFul,并配置了路由。我可以发布、获取、放置和删除,但我不能下载文件。下面是一个示例代码,用于获取

public function view($id) {
    $object = $this->Imodel->find('first', array('conditions' => array('Imodel.id' => $id), 'contain' => array()));
    $this->set(array(
        'object' => $object,
        '_serialize' => array('object')
    ));
}

如果您能帮助我使用REST下载一个文件,并遵守我已经拥有的REST架构,我将不胜感激。

Edit过了一段时间,我终于让它工作起来了。为了防止其他人遇到同样的问题,整个过程都是为了更好地理解cakePHP HttpSocket。所以首先在注册Web服务的服务器上(我们从那里下载文件),下面是我的函数;它的响应是一个文件,如(此处)所述

public function getpdffile($id = NULL){
    $filepath = APP. 'Files/file.pdf'; //path to the file of interest
    $this->response->file($filepath);
    return $this->response;
}

因为这个文件不是公共的(不在webroot中),我必须使用MediaView。然后在设置好这个之后,我会使用HttpSocket来检索它以供下载,如下所示:

public function download($id = NULL, $fileMine = 'pdf', $fileName = 'file', $download = TRUE){
    $httpSocket = new HttpSocket();
    $filepath = APP. 'Files/myfile.pdf';
    $file = fopen($filepath, 'w');
    $httpSocket->setContentResource($file);
    $link = MAIN_SERVER."rest_models/getpdffile/".$id.".json";
    $httpSocket->get($link);
    fclose($file);
    $this->response->file($filepath);
    return $this->response;
}

我在那里所做的是将文件复制到我的服务器的App文件夹中,并在视图中渲染它。我希望它对某人有帮助:-)

nzrxty8p

nzrxty8p1#

在哪个服务器上调用文件下载:

$file = file_get_contents(urlwhereyoudownload) ;

在注册webservice的服务器上:

header('Content-type: $mimetypeoffile');
header('Content-Disposition: attachment; filename=".$fileName."');
readfile("$pathtofile");exit;

相关问题