$ _FILES包含上传的文件,而Laravel请求则不包含

时间:2017-01-04 14:48:57

标签: php angularjs laravel file-upload

我使用Laravel作为API,使用AngularJS作为与之交互的前端。我正在尝试使用ng-file-upload上传文件,但我面临一个奇怪的问题。

全局变量$_FILES仅包含上传的$request->file('img')为空,因此自定义请求验证失败,因为它无法看到上传的文件。

我找到了几个答案,说明将use Illuminate\Http\UploadedFile;添加到控制器,以便我可以访问上传的文件,但我不能到目前为止。我已经检查了表单中包含enctype="multipart/form-data"的代码,但仍无法正常工作

我如何访问该文件,同时正确应用验证规则?

Angular Form:

<div class="small-6 medium-3 columns small-centered">
    <form name="products.storeForm" ng-submit="products.store()" enctype="multipart/form-data">
        <label>Name</label>
        <input type="text" ng-model="products.product.name" name="name" required>
        <label>Image</label>
        <img ng-src="{{image_source}}">
        <input type="file" name="img" onchange="angular.element(this).scope().setFile(this)" ngf-pattern="image/*" accept="image/*" ng-model="products.product.img">
        <button type="submit" class="button">Submit</button>
    </form>
</div>

Angular Service:

service.store = function(product){
    console.log(product.img)
    return Upload.upload({
        url: url,
        headers: { 'Content-Type' : 'application/json' },
        method: 'POST',
        sendFieldAs: 'form',
        fields: {
            name: product.name
        },
        file: product.img,
        fileFormDataName: 'image'
    })
};

2 个答案:

答案 0 :(得分:0)

没有办法对此进行测试,但我使用image密钥传递图像的事实将是我的起点(在您的Angular上传服务上):

fileFormDataName: 'image'

但是你试图使用Laravel中的img键来获取它:

$request->file('img')

答案 1 :(得分:0)

$request->file('img')之前尝试使用laravel控制器方法下面的测试代码,我希望你能得到答案。

print('<pre style="color:red;">');
print_r($request->all());
print('</pre>');
exit;