railsのfile_fieldを編集してuploadの画像が表示されるようにする
目的
画像のアップロードが
こういうのでダサいのでデザインを変えたい!しかしじつはこのファイルを選択ボタンとfile名が表示されるのは同じでどちらかを消してデザインを足すというのができない。。。なので2つとも消してuploadしたファイルのプレビューを出す方法を下記にまとめた。
fileuploadのデザインを変える
<label for="post_image" class="btn btn-outline-secondary"><i class="fas fa-upload"></i>サムネイル画像(任意)</label>
<%= f.file_field :image , class: "hidden" , "v-on:change" => "onFileChange" %>
</label>
<label for="post_image" class="btn btn-outline-secondary"><i class="fas fa-upload"></i>サムネイル画像(任意)</label>
<%= f.file_field :image , class: "hidden" , "v-on:change" => "onFileChange" %>
</label>
file_fieldをhiddenで消してlabelにデザインを入れる。forとidでつなげるのを忘れずに
デザインを消すとuploadした画像がわからなくなるのでvueで表示
<div id="app">
<div class="row" v-show="uploadedImage">
<div class="col-md-12 col-sm-12 image_upload">
<img :src="uploadedImage" class="rounded form_thum_image" />
</div><!--12-->
</div><!--row-->
<div class="row">
<div class="col-md-12 col-sm-12 image_upload">
<label for="post_image" class="btn btn-outline-secondary"><i class="fas fa-upload"></i>サムネイル画像(任意)</label>
<%= f.file_field :image , class: "hidden" , "v-on:change" => "onFileChange" %>
</label>
</div><!--12-->
</div><!--row-->
</div>
app.js
import Vue from 'vue/dist/vue.esm';
var app = new Vue({
el: '#app',
data() {
return {
uploadedImage: '',
};
},
methods: {
onFileChange(e) {
let files = e.target.files || e.dataTransfer.files;
this.createImage(files[0]);
},
// アップロードした画像を表示
createImage(file) {
let reader = new FileReader();
reader.onload = (e) => {
this.uploadedImage = e.target.result;
};
reader.readAsDataURL(file);
},
},
})
<div id="app">
<div class="row" v-show="uploadedImage">
<div class="col-md-12 col-sm-12 image_upload">
<img :src="uploadedImage" class="rounded form_thum_image" />
</div><!--12-->
</div><!--row-->
<div class="row">
<div class="col-md-12 col-sm-12 image_upload">
<label for="post_image" class="btn btn-outline-secondary"><i class="fas fa-upload"></i>サムネイル画像(任意)</label>
<%= f.file_field :image , class: "hidden" , "v-on:change" => "onFileChange" %>
</label>
</div><!--12-->
</div><!--row-->
</div>
app.js
import Vue from 'vue/dist/vue.esm';
var app = new Vue({
el: '#app',
data() {
return {
uploadedImage: '',
};
},
methods: {
onFileChange(e) {
let files = e.target.files || e.dataTransfer.files;
this.createImage(files[0]);
},
// アップロードした画像を表示
createImage(file) {
let reader = new FileReader();
reader.onload = (e) => {
this.uploadedImage = e.target.result;
};
reader.readAsDataURL(file);
},
},
})
上記で"v-on:change"でuploadしたら発火するようにする。
Author And Source
この問題について(railsのfile_fieldを編集してuploadの画像が表示されるようにする), 我々は、より多くの情報をここで見つけました https://qiita.com/you8/items/94ff0b60c26cd3371efa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .