Vue+axios+Node+expressファイルアップロードを実現します。


Vueページのコード

<label for='my_file' class="theme-color">
 <mu-icon left value="backup"></mu-icon>
     
</label>
<input type="file" ref="upload" name="avatar" id='my_file' style="display:none;" accept="image/jpg" @change="changeAvatar" />
axiosインターフェース

let ChangeAvatar = (img) => axios({
 url: '/user/changeavatar',
 method: 'post',
 anync: true,
 contentType: false,
 processData: false,
 data: img
})
jsはパッケージのインターフェースを一部呼び出します。

 methods: {
  changeAvatar (event) {
   let img = event.target.files[0];
   let size = img.size;
   if (size > 3145728) {
    alert('   3M     !');
    return false;
   }
   let Form = new FormData();
   Form.append('avatar', img, this.avatar_name);
   API.ChangeAvatar(Form)
    .then((response) => {
     console.log(response)
    })
    .catch((error) => {
     console.log(error)
    })
  }
 }
  • ここで私はform方式を使っていません。inputを隠して、labelでinputをバインドして、labelをクリックした時に、input
  • をクリックしました。
  • 私はもう一つのファイルに入れてほしいです。Change Avatar関数です。もし包装しないなら、普通の書き方で同じです。
  • です。
  • Form.apped('avaar's)、this.avaar_name;最初のパラメータはinputのnameで、2番目のパラメータはファイルオブジェクトで、3番目のパラメータはファイルの名前は
  • です。
  • ajax new FormData()方法で書類を提出する時、data:{a:1}のキー値で方法に対して提出することができません。直接にファイルの対象をdataに提出しなければなりません。FormData
  • バックグラウンドのコード
    
    const fileUpload = require('express-fileupload');
    app.use(fileUpload());
    
    app.post('/user/changeavatar', function(req, res) {
     console.log(req.files); // the uploaded file object
     let avatar = req.files.avatar;
    
     // Use the mv() method to place the file somewhere on your server
     avatar.mv('dist/static/img/avatar/'+req.files.avatar.name+'.jpg', function(err) {
      if (err)
       return res.status(500).send(err);
    
      res.send('File uploaded!');
     });
    })
    
    
    ここではmultierを使っていません。他の人のnpmでexpress-fileupladを包んでいます。
    コード実行、画像を指定ディレクトリにアップロードしました。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。