当前位置: 首页 > 面试题库 >

AngularJS如何上传多部分表单数据和文件?

卢嘉誉
2023-03-14
问题内容

我是angular.js的初学者,但是对基础知识有很好的了解。

我要做的是上传文件和一些表单数据作为多部分表单数据。我读到这不是angular的功能,但是3rd
party库可以做到这一点。我已经通过git克隆了angular-file-upload,但是仍然无法发布简单的表单和文件。

有人可以提供如何执行此操作的示例,html和js吗?


问题答案:

首先

  1. 您无需对结构进行任何特殊更改。我的意思是:html输入标签。
    <input accept="image/*" name="file" ng-value="fileToUpload"

           value="{{fileToUpload}}" file-model="fileToUpload"

           set-file-data="fileToUpload = value;" 

           type="file" id="my_file" />

1.2创建自己的指令,

    .directive("fileModel",function() {

        return {

            restrict: 'EA',

            scope: {

                setFileData: "&"

            },

            link: function(scope, ele, attrs) {

                ele.on('change', function() {

                    scope.$apply(function() {

                        var val = ele[0].files[0];

                        scope.setFileData({ value: val });

                    });

                });

            }

        }

    })
  1. 在带有$ httpProvider的模块中,添加具有multipart / form-data的依赖项(如Accept,Content-Type等)。(建议是接受json格式的响应)例如:

$ httpProvider.defaults.headers.post [‘Accept’] =’application / json,text /
javascript’; $ httpProvider.defaults.headers.post [‘Content-Type’]
=’multipart / form-data; charset = utf-8’;

  1. 然后在控制器中创建单独的函数来处理表单提交调用。例如下面的代码:

  2. 在服务函数中,要有目的地处理“ responseType”参数,以便服务器不应抛出“ byteerror”。

  3. transformRequest,用于修改带有附加身份的请求格式。

  4. withCredentials:false,用于HTTP认证信息。

    in controller:



      // code this accordingly, so that your file object 

      // will be picked up in service call below.

      fileUpload.uploadFileToUrl(file); 





    in service:



      .service('fileUpload', ['$http', 'ajaxService',

        function($http, ajaxService) {



          this.uploadFileToUrl = function(data) {

            var data = {}; //file object 



            var fd = new FormData();

            fd.append('file', data.file);



            $http.post("endpoint server path to whom sending file", fd, {

                withCredentials: false,

                headers: {

                  'Content-Type': undefined

                },

                transformRequest: angular.identity,

                params: {

                  fd

                },

                responseType: "arraybuffer"

              })

              .then(function(response) {

                var data = response.data;

                var status = response.status;

                console.log(data);



                if (status == 200 || status == 202) //do whatever in success

                else // handle error in  else if needed 

              })

              .catch(function(error) {

                console.log(error.status);



                // handle else calls

              });

          }

        }

      }])


    <script src="//unpkg.com/angular/angular.js"></script>


 类似资料:
  • 我正在尝试在 Java 应用程序中设置一个 Apache Camel 路由,其中使用者终结点是一个 restlet 组件,它将 HTTP 文件上传作为多部分表单数据的 POST 进行处理,然后创建者终结点将请求转发到也接受多部分表单数据的 rest 服务。我是骆驼的新手,不知道如何正确地连接它。以下是到目前为止我的路线。我是否需要对正文进行任何转换,还是会按原样转发多部分表单数据?有人可以为我提供

  • 有人知道如何在中使用吗。Net 4.5与上传? 我在网上找不到任何例子。

  • 在将FreshDesk集成到我的产品中时,我被用附件API创建票证所困扰。我使用高级Rest客户端测试API。我已经看到了许多关于栈溢出本身的论坛和问题,但我仍然对任何关于上传文件的多部分形式数据POST请求的回答不满意。 我想知道Advanced Rest Client中所需的请求格式以及标题 到目前为止,这是我正在使用的请求,但我没有得到正确的响应:

  • 位卡在这个上,需要上传图像和json一起使用多部分形式...不知道如何发送内容类型标头或上传图像...认为我需要转换为blob...目前我只是发送我从文件输入字段中获得的数据。 任何建议都很好谢谢

  • 我有一个NodeJs/React应用程序。用例是上传一个文件,让第三方API扫描它,然后如果成功保存相同的文件。在扫描完成之前,我们无法保存文件。 我们正在使用fetch方法从react以多部分formdata的形式上载该文件。一旦在节点中接收到文件。js访问文件并检查文件大小和类型,我们使用multer如下。 现在scanapi希望我们也将文件作为多部分表单数据发送。在此场景中,如何使用req中

  • 我有一个windows服务,正在上传一个多部分数据表单在C#。它上传了一个csv,其中包含身份验证变量,形式如下:一个密钥、一个上下文和一个UUID。变量是在自定义标记类中设置的。每次我尝试上传,我得到一个403错误。 在我的开发过程中,我创建了自己的S3 bucket,并添加了能够成功上传文件的NuGet AWS S3类。现在我上传到第三方桶,我不断得到一个403错误。谢了!