如何通过FOSRestBundle处理文件

时间:2016-04-12 16:34:59

标签: php symfony fosrestbundle

我正在使用FOS Rest Bundle创建一个REST API,我希望能够处理文件上传。问题是我不知道如何发送和接收文件。我唯一的文件传输经验是PHP的$ _FILES,它对我没什么帮助。

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

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

2 个答案:

答案 0 :(得分:3)

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

在您的控制器(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表单(我称之为"文件")你可以测试它(在我的情况下,我已经使用了谷歌扩展Postman

请记住选择" form-data"在邮递员 我希望它会帮助你。

答案 1 :(得分:2)

FOSRestBundle与否,您可以使用Request提供的$files来获取上传的文件。

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