如何通过 FOSRestBundle 处理文件

How to work with files through FOSRestBundle

我正在使用 FOS Rest Bundle 创建一个 REST API,我想可以在其中处理文件上传。问题是我不知道如何发送和接收文件。我唯一的文件传输经验是使用 PHP 的 $_FILES,它对我帮助不大。

我考虑过使用 Base64 编码并以 JSON 发送文件,但由于文件可能非常大,所以这不是一个可行的解决方案。截至目前,我正在考虑使用 json 发送元数据请求和发送文件的另一个请求。我没有找到任何关于如何处理文件传输的示例,因为似乎每个人都知道它是如何工作的。

我对 symfony2 也很陌生,但我了解基本概念。

几个月前我已经解决了这个问题:

在您的控制器 (APIController) 中使用此操作(方法)

public function postUploadAction(Request $request)
{   
    $uploadedfile = $this->getRequest()->files->get('file');
    $directory = __DIR__.'/../../../../web/uploads/pinkSheet';

    foreach($request->files as $uploadedFile) {
        $file = $uploadedFile->move($directory, $uploadedFile->getClientOriginalName());
    }

    return 'file uploaded.';
}

并且对于您的客户(在我的例子中,我从 Android 应用程序收到数据),您只需发送文件,因为它会以 html 形式带有密钥(我调用我的 "file") 你可以测试它(在我的例子中,我使用了 google chrom 扩展 Postman

记得在邮递员上选择"form-data" 希望对你有帮助。

不管有没有FOSRestBundle,都可以使用Request提供的$files获取上传的file/s

use Symfony\Component\HttpFoundation\Request;

public function uploadAction(Request $request)
{

    $file = $request->files->get('file');
    //do what ever you want to do with the files

}

如果您想使用 FOSRestBundle 提供的助手来完成它,请检查此 https://github.com/FriendsOfSymfony/FOSRestBundle/pull/1097