如何在 Vuejs 中发送文件?

Posted

技术标签:

【中文标题】如何在 Vuejs 中发送文件?【英文标题】:How to send files in Vuejs? 【发布时间】:2017-07-29 07:01:11 【问题描述】:

我有两个脚本

Vue 组件中的第一个:

var data = 
    cover: myResult[0], // first file
    file: myResult[1], // second file
    title: self.title, // first string
    desc: self.desc // second string
;
self.$http.post('tracks.post', data)
    .then(res =>
         console.log(data); // 1*
         console.log(res); //  2*
)

和服务器上的php脚本:

dd(file_get_contents('php://input')); // 3*
dd($_FILES); // 4*

dd() - 只是一个查看参数的函数

1* - 一切正常,所有字符串和文件都存在:

Object cover: File, file: File, title: "ada", desc: "asdasd"

2* - 并非一切都好(下一个解释) 3* - 仅显示字符串,但文件消失:

string(52) ""cover":,"file":,"title":"ada","desc":"asdasd""↵

4* - 在 $_FILES 中也不存在文件:

数组(0)↵↵

那么,我应该如何在 vuejs 中发送文件?

【问题讨论】:

我将文件从 vuejs 发送到 laravel ,希望它也适用于核心 php。 ***.com/questions/42579070/… 【参考方案1】:

经过几个小时的测试,我找到了用字符串发布文件的正确方法:

let data = new FormData();
data.append('token', self.$auth.getToken());
data.append('file', file);
data.append('cover', cover);
data.append('title', self.title);
data.append('desc', self.desc);

然后像往常一样发送数据。希望它对将来的人有所帮助。

【讨论】:

【参考方案2】:

我不知道如何在 VueJS 中发送文件。我所知道的是一年前我遇到了与 angularjs 类似的问题。我的解决方案是使用 javascript FormObject() 将数据发送到服务器,而不仅仅是使用 Object()。我还必须编写一个看起来像这样的自定义指令

<input data-file id="id_image" name="image" ng-model="museumMap" type="file">

myApp.directive('file', function() 
    return 
        require:"ngModel",
        restrict: 'A',
        link: function($scope, el, attrs, ngModel)
            el.bind('change', function(event)
                var files = event.target.files;
                var file = files[0];

                ngModel.$setViewValue(file);
                $scope.$apply();
            );
        
    ;
);

我知道这并不能直接回答您的问题,但希望它能给您一个起点。我先尝试使用 FormObject()。

【讨论】:

以上是关于如何在 Vuejs 中发送文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 laravel 控制器发送到 vuejs

如何使用 FormData 发送文件数组?

如何使用 js 或 axios 将表单数据中的 url 作为文件发送

VueJS:如何在多页面应用程序中使用路由来发送 url 查询参数?

如何使用 laravel 和 vuejs 下载文件

如何将多个文件从 Vue js 发送到 PHP