Laravel 在Vue Js中捕获多个图像

Laravel 在Vue Js中捕获多个图像,laravel,vue.js,laravel-7,Laravel,Vue.js,Laravel 7,我在vue中将多个图像捕获到我的函数并传递到控制器时遇到问题。我正在尝试修改我的刀片文件,它在使用普通形式时运行良好。我正在尝试修改为vue,但图像部分有问题。请帮助我如何做到这一点 我的表格: <label for="">Description</label> <textarea name="description" class="form-control"

我在vue中将多个图像捕获到我的函数并传递到控制器时遇到问题。我正在尝试修改我的刀片文件,它在使用普通形式时运行良好。我正在尝试修改为vue,但图像部分有问题。请帮助我如何做到这一点

我的表格:

           <label for="">Description</label>
            <textarea name="description" class="form-control" v-model="description"> </textarea> 
            <label for="">Images</label>
            <input type="file"  @change="fieldChange" class="form-control input-sm" name="images[]" 
            multiple>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>

以下是vuejs部件的工作代码-

Vue部件

<template>
<div class="uploader"
    @dragenter="OnDragEnter"
    @dragleave="OnDragLeave"
    @dragover.prevent
    @drop="onDrop"
    :class="{ dragging: isDragging }">
    
    <div class="upload-control" v-show="images.length">
        <label for="file">Select files</label>
        <button @click="upload">Upload</button>
    </div>


    <div v-show="!images.length">
        <i class="fa fa-cloud-upload"></i>
        <p>Drag your images here</p><div>OR</div>
        <div class="file-input">
            <label for="file">Select files</label>
            <input type="file" id="file" @change="onInputChange" multiple>
        </div>
    </div>

    <div class="images-preview" v-show="images.length">
        <div class="img-wrapper" v-for="(image, index) in images" :key="index">
            <img :src="image" :alt="`Image Uplaoder ${index}`">
            <div class="details">
                <span class="name" v-text="files[index].name"></span>
                <span class="size" v-text="getFileSize(files[index].size)"> </span>
            </div>
        </div>
    </div>
<div v-show="images.length" class="progress">
    <div
        class="progress-bar progress-bar-info progress-bar-striped"
        role="progressbar"  :aria-valuenow="progress"
        aria-valuemin="0"   aria-valuemax="100"
        :style="{ width: progress + '%' }"
    >
    {{ progress}}%
</div>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default 
{   data: () => ({ isDragging: false, dragCount: 0, files: [],images: []  ,progress:0}),
methods: {
    OnDragEnter(e) {    e.preventDefault();
                        this.dragCount++;
                        this.isDragging = true;
                        return false;
                    },
    OnDragLeave(e) {   e.preventDefault();
                        this.dragCount--;
                        if (this.dragCount <= 0)  this.isDragging = false;
                    },
    onInputChange(e) {  const files = e.target.files;
                        Array.from(files).forEach(file => this.addImage(file));
                    },
    onDrop(e) {console.log('ondrop-evnt e=',e)
        e.preventDefault();
        e.stopPropagation();
        this.isDragging = false;
        const files = e.dataTransfer.files;
        Array.from(files).forEach(file => this.addImage(file));
    },
    addImage(file) {console.log('addimage file=',file)
        if (!file.type.match('image.*')) {  this.$toastr.e(`${file.name} is not an image`);
                                            return;
                                        }
                    this.files.push(file);
                    const img = new Image(),
                    reader = new FileReader();
                    reader.onload = (e) => this.images.push(e.target.result);
                    reader.readAsDataURL(file);
                    console.log('addimage this.images=',this.images)
                },
    getFileSize(size) { const fSExt = ['Bytes', 'KB', 'MB', 'GB'];
                        let i = 0;
                        while(size > 900) { size /= 1024; i++; }
                        return `${(Math.round(size * 100) / 100)} ${fSExt[i]}`;
                      },
    upload() {  //this.progress = '0';
                const formData = new FormData();
                
                this.files.forEach(file => 
                {    formData.append('images[]', file, file.name);   });
                console.log('upload triggered FormData=',formData)
               // resp=axios.post('http://127.0.0.1:8000/sendemail1',this.formData); 
              //  axios.post('http://127.0.0.1:8000/api/imagesupload', formData,
                axios.post('https://uat.oms.dowell.com.au/api/imagesupload', formData,
                            {onUploadProgress:uploadEvent=>{  this.progress=Math.round(uploadEvent.loaded/uploadEvent.total*100);
                                        
                                    console.log('upld prges:'+    Math.round(uploadEvent.loaded/uploadEvent.total*100)+'%')
                                }
                            })
                //axios.post('https://uat.oms.dowell.com.au/api/imagesupload', formData)
                    .then(response => {
                        this.$toastr.s('All images uplaoded successfully');
                        this.images = [];
                        this.files = [];
                        this.progress = 0;
                        })
                            .catch(() => {
                                
                                this.$toastr.e('Could not upload the  files!');
                                this.images = [];
                                this.files = [];
                                this.progress = 0;
                                });
                                }
}
}
</script>
拉拉维尔的另一条路在这里

在post调用中,您需要指定正确的表单数据:多部分/表单数据
  public function store(Request $request)
    {
          $product=Products::create([
         'title'=>$request['title'],
         'description'=>$request['description'],
         'price'=>$request['price'],
         'location'=>$request['location']
             ]);
          $images= $request->file('images');
          foreach ($images as $image){
           $move=$image->move(public_path().'/images2/',$image->getClientOriginalName()); 
         if($move){
         $imagedata=Images::create([
        'title'=>$image->getClientOriginalName(),
        'filename'=>$image->getClientOriginalName()
        ]);
         $product->images()->attach([$imagedata->id]);
          }
    
<template>
<div class="uploader"
    @dragenter="OnDragEnter"
    @dragleave="OnDragLeave"
    @dragover.prevent
    @drop="onDrop"
    :class="{ dragging: isDragging }">
    
    <div class="upload-control" v-show="images.length">
        <label for="file">Select files</label>
        <button @click="upload">Upload</button>
    </div>


    <div v-show="!images.length">
        <i class="fa fa-cloud-upload"></i>
        <p>Drag your images here</p><div>OR</div>
        <div class="file-input">
            <label for="file">Select files</label>
            <input type="file" id="file" @change="onInputChange" multiple>
        </div>
    </div>

    <div class="images-preview" v-show="images.length">
        <div class="img-wrapper" v-for="(image, index) in images" :key="index">
            <img :src="image" :alt="`Image Uplaoder ${index}`">
            <div class="details">
                <span class="name" v-text="files[index].name"></span>
                <span class="size" v-text="getFileSize(files[index].size)"> </span>
            </div>
        </div>
    </div>
<div v-show="images.length" class="progress">
    <div
        class="progress-bar progress-bar-info progress-bar-striped"
        role="progressbar"  :aria-valuenow="progress"
        aria-valuemin="0"   aria-valuemax="100"
        :style="{ width: progress + '%' }"
    >
    {{ progress}}%
</div>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default 
{   data: () => ({ isDragging: false, dragCount: 0, files: [],images: []  ,progress:0}),
methods: {
    OnDragEnter(e) {    e.preventDefault();
                        this.dragCount++;
                        this.isDragging = true;
                        return false;
                    },
    OnDragLeave(e) {   e.preventDefault();
                        this.dragCount--;
                        if (this.dragCount <= 0)  this.isDragging = false;
                    },
    onInputChange(e) {  const files = e.target.files;
                        Array.from(files).forEach(file => this.addImage(file));
                    },
    onDrop(e) {console.log('ondrop-evnt e=',e)
        e.preventDefault();
        e.stopPropagation();
        this.isDragging = false;
        const files = e.dataTransfer.files;
        Array.from(files).forEach(file => this.addImage(file));
    },
    addImage(file) {console.log('addimage file=',file)
        if (!file.type.match('image.*')) {  this.$toastr.e(`${file.name} is not an image`);
                                            return;
                                        }
                    this.files.push(file);
                    const img = new Image(),
                    reader = new FileReader();
                    reader.onload = (e) => this.images.push(e.target.result);
                    reader.readAsDataURL(file);
                    console.log('addimage this.images=',this.images)
                },
    getFileSize(size) { const fSExt = ['Bytes', 'KB', 'MB', 'GB'];
                        let i = 0;
                        while(size > 900) { size /= 1024; i++; }
                        return `${(Math.round(size * 100) / 100)} ${fSExt[i]}`;
                      },
    upload() {  //this.progress = '0';
                const formData = new FormData();
                
                this.files.forEach(file => 
                {    formData.append('images[]', file, file.name);   });
                console.log('upload triggered FormData=',formData)
               // resp=axios.post('http://127.0.0.1:8000/sendemail1',this.formData); 
              //  axios.post('http://127.0.0.1:8000/api/imagesupload', formData,
                axios.post('https://uat.oms.dowell.com.au/api/imagesupload', formData,
                            {onUploadProgress:uploadEvent=>{  this.progress=Math.round(uploadEvent.loaded/uploadEvent.total*100);
                                        
                                    console.log('upld prges:'+    Math.round(uploadEvent.loaded/uploadEvent.total*100)+'%')
                                }
                            })
                //axios.post('https://uat.oms.dowell.com.au/api/imagesupload', formData)
                    .then(response => {
                        this.$toastr.s('All images uplaoded successfully');
                        this.images = [];
                        this.files = [];
                        this.progress = 0;
                        })
                            .catch(() => {
                                
                                this.$toastr.e('Could not upload the  files!');
                                this.images = [];
                                this.files = [];
                                this.progress = 0;
                                });
                                }
}
}
</script>
public function imagesupload(Request $request){
   if (count($request->images)) {
    foreach ($request->images as $image) {
        $image->store('images');
    }
  }
  return response()->json(["message" => "Done"]);
 }