Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send an file with $http.post in Vue.Js

How can I send a file with vue.js?

The following code is not working for me:

<span title="Upload" class="badge badge-info">
            <input type="file" id="file" name="file" @change="uploadData" class="archive" > <i id="iarchive" class="fa fa-upload"></i> 
</span>

When I make console.log(this.request.file) I get FILE [object File].

Here is the .js:

  uploadData: function(e) {
                var files = e.target.files[0];


                this.request.action = 'upload';
                this.request.file = files;
                console.log("FILE "+this.request.file);

                this.$http.post('data/getData.php', {
                data: this.request,    
                headers: {
                           'Content-Type': 'multipart/form-data'                   
                }
              }
               ).then(function(response) {

                    console.log("RESPONSE: "+response.body);

            }, function(response) {

                alert("error");
            });
            return false;
        }

But in PHP, I can't get the file, the response is :{} No properties.

PHP code:

$request = json_decode(file_get_contents('php://input')); 
$req = $request->data;
echo json_encode($req->file)
like image 419
Andress Blend Avatar asked Jan 29 '18 13:01

Andress Blend


People also ask

How do I send files to Vue backend?

To pass the file from the client to the backend, use the new FormData() object. In your case you can do something like: var params = new FormData(); params. append('data', this.

How do you link Vue js file to HTML?

The simplest way to get started with Vue is to grab the development version script for it and add it to the head tag of your HTML file. Then you can start Vue code inside the HTML file inside of script tags. And have the Vue code connect up with an existing element on your HTML page.


1 Answers

Add ref attribute to input:

<input ref="file-input" .../>

In controller you should write action:

uploadFile: function () {
  // try to log $refs object for deep understanding
  let fileToUpload = this.$refs.fileInput.files[0];
  let formData = new FormData();

  formData.append('fileToUpload', fileToUpload);
  this.$http.post ( 'data/getData.php', formData ).then(function () {
    // success actions
  });
}    

In php endpoint your uploaded files will be in form request object.

like image 86
Nikita Avatar answered Oct 22 '22 11:10

Nikita