我正在使用FOS Rest Bundle创建一个REST API,我希望能够处理文件上传。问题是我不知道如何发送和接收文件。我唯一的文件传输经验是PHP的$ _FILES,它对我没什么帮助。
我虽然在Base64中进行编码并使用JSON发送文件,但由于文件可能非常大,因此它不是一个可行的解决方案。截至目前,我正在考虑使用json发送元数据的请求以及发送文件的另一个请求。我没有找到关于如何处理文件传输的任何示例,因为似乎每个人都知道它是如何工作的。
我对symfony2也很陌生,但我理解基本概念。
答案 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