Angularjs ngResource 需要将文件作为字段之一

Posted

技术标签:

【中文标题】Angularjs ngResource 需要将文件作为字段之一【英文标题】:Angularjs ngResource needs to have file as one of the fields 【发布时间】:2013-12-12 06:42:23 【问题描述】:

我的资源包含以下字段:

description, picture

是否可以将该资源作为多部分/表单发送到 URL,如果可以,如何发送?

我试过把:

app.factory('resource_name', ['$resource', function($resource) 
return $resource('<url> ',
    
            <params_for_url>
    ,
        save: 
            method: "POST",
            headers: 
                "Content-Type": "multipart/form-data;"
            
        ,

但这不会作为表单数据到达服务器。它就像 JSON 一样,只是设置了标头:


description: "gtrdgf",
picture: 
    lastModifiedDate:2013-11-26T20:42:13.000Z,
    name: "suggested_pokes.png"
    size: 32995
    type: "image/png"
    webkitRelativePath: ""

以前有人满足过这个要求吗?如果这是可能的...

谢谢!

【问题讨论】:

仅设置内容类型不会使用 AJAX 上传文件....如果需要跨浏览器支持,请使用文件上传插件 【参考方案1】:

我找到了解决方案。您必须使用 FormData 提交它。您可以将其用作拦截器。我是这样用的(这是我的ngResource的save方法)

            save: 
                method: 'POST',
                transformRequest: formDataObject,
                headers: 'Content-Type':undefined, enctype:'multipart/form-data'
            ,

这里是变压器:

        function formDataObject (data) 
            var fd = new FormData();
            angular.forEach(data, function(value, key) 
                fd.append(key, value);
            );
            return fd;
        

【讨论】:

需要什么变压器? 否则它不会发送文件...它只是发送简单的表单字段。还有什么是transformer,看官方的angularjs页面 这行得通,但是在使用它时没有为我设置标题 Content-length,有没有办法为文件设置它? 您是否尝试过使用不包含文件的表单?有用吗? 我认为应该,但在这种情况下你也应该考虑改变 enctype

以上是关于Angularjs ngResource 需要将文件作为字段之一的主要内容,如果未能解决你的问题,请参考以下文章

使用 ngResource 在 AngularJS 中设置 enctype

[AngularJS] AngularJS系列 中级篇之ngResource

根据所选项目在 ngResource (angularjs) 中查询数据

AngularJS:如何使用 ngResource 处理成功和错误回调?

我如何在 angularjs 中使用 Restful。我使用了 ngResource 但它不起作用。如果我使用 ngResource,js 文件 nt 正在执行

AngularJS 错误:模块“ngResource”不可用!您要么拼错了模块名称,要么忘记加载它