【问题标题】:Quasar q-uploader with Laravel not recognizing the file while q-file works使用 Laravel 的 Quasar q-uploader 在 q-file 工作时无法识别文件
【发布时间】:2020-02-17 15:41:35
【问题描述】:

我能够获取 q-file 来上传单个图像,并且我的 Laravel API 可以完美地处理它。当然,我需要一次上传多个文件,所以我尝试切换到 q-uploader,当我记录响应时,文件显示为 [object File]。

我也尝试在 FileController 中使用 $request->file('attachment') 但它返回 null。

    <q-uploader
      :factory="uploadFactory"
      label="Upload Images/Files"
      color="primary"
      multiple
    />

然后在我的 FileController.php 中:

public function upload(Request $request) {
  \Log::info($request);
}

返回:

array (
  'attachment' => '[object File]',
  'fileable_type' => 'App\\Task',
  'fileable_id' => '27375',
  'vessel_id' => '1',
)

我要上传的工厂:

uploadFactory (file) {
  let data = new FormData()
  data.append('attachment', file)
  data.append('fileable_type', 'App\\Task')
  data.append('fileable_id', this.task.id)
  data.append('vessel_id', this.vessel.id)
  return new Promise((resolve, reject) => {
    this.$axios.post('/api/file/upload', data, { headers: { 'Content-Type': 'multipart/form-data' } }).then(response => {
      console.log(response)
      resolve(null)
    }).catch(error => {
      if (error) {
        console.log(error)
      }
    })
  })
},

当我用 q-file 尝试这个时:

    <q-file color="primary" v-model="attachments" label="Images/Files" outlined>
      <template v-slot:prepend>
        <q-icon name="attach_file" />
      </template>
      <template v-slot:after v-if="canUpload">
        <q-btn
          color="primary"
          dense
          icon="cloud_upload"
          round
          @click="submitFiles"
          :disable="!canUpload"
          :loading="isUploading"
        />
      </template>
    </q-file>

它有效,这是我在 Laravel 中为请求登录的内容:

array (
'fileable_type' => 'App\\Task',
  'fileable_id' => '27375',
  'vessel_id' => '1',
  'attachments' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'IMG_0126.jpg',
     'mimeType' => 'image/jpeg',
     'error' => 0,
     'hashName' => NULL,
  )),
)

【问题讨论】:

    标签: laravel laravel-5.8 quasar-framework quasar laravel-filesystem


    【解决方案1】:

    您可能已经得到了这个问题的答案。 但这就是我所做的。我从 q-uploader 遇到了同样的问题,将一个文件发送到 laravel,一切正常。但是我在发送多个文件时卡住了。我不得不查阅各种来源的信息来安排打孔过程。 所以我做的是这样的:

    在我的前端:

    <q-uploader
                     :factory="uploadFiles"
                     :loading="uploadPercent"
                     :url="getUrl()"
                     @finish="finished"
                     label="Cargar Archivos (max 2MB)"
                     ref="uploader"
                     multiple
                     bordered
                     batch
                     accept=".png, .jpeg, .jpg, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .pdf, pdf/*, image/*"
                     :max-file-size="2048000"
                     />
    

    关于我的方法:

    uploadFiles(file){
            this.uploadPercentage = true
            let files = file
            console.log(files)
            let files_count = files.length + this.files.length
            if(files_count > 10){
               this.Notify(`El límite de archivos por tarea es de 10`,'negative')
               this.finished()
               return
            }
            const data = new FormData()
            for(var i = 0; i < files.length; i++){
               let file = files[i]
               data.append(`files[${i}]`, file)
            }
            data.append('teacher', this.teacher)
            data.append('homework', this.homework)
            return new Promise((resolve, reject) => {
               this.$axios.post(`${process.env.API}/homework/upload-files`, data,
               {
                  headers: { 'content-type': 'multipart/form-data' },
                  processData: false,  contentType: false
               })
               .then(res => {
                  resolve(null)
                  this.uploadPercentage = false
                  this.files = res.data
                  this.Notify('Se subieron los archivos con éxito','positive')
               })
               .catch(err => {
                  reject(err)
                  this.errors = err.response.data.errors
                  this.uploadPercentage = false
                  this.Notify('No se pudieron cargar los archivos, o el formato de alguno de los archivos no es correcto, o alguno de los archivos pesa más de 2MB','negative')
               })
            })
         },
    

    在我的后端功能上,我只存储文件(我将它存储在公共文件夹而不是存储中,因为我在这个项目上有一个共享主机),另外你可以添加一些代码来保存文件位置到您的数据库:

    public function upload_files(Request $request)
    {
        $homework = DB::table('homeworks as h')
            ->join('teachers as t','t.id','=','h.teacher_id')
            ->join('users as u','u.id','=','t.teacher_id')
            ->select('h.id')
            ->where('h.code','=',$request->homework)
            ->where('u.code','=',$request->teacher)
            ->first();
    
        if(!$homework){
            return response()->json(['success'=>false,'msg'=>'Not avalid homework'],422);
        }
    
        try{
            DB::beginTransaction();
    
            $files = $request->file('files');
    
            if(!empty($files)){
                for($i = 0; $i < count($files); $i++){
                    $file = $files[$i];
                    $filename = $request->homework.'_'.uniqid('doc_').'.'.$file->getClientOriginalExtension();
                    $path = public_path('/uploads');
                    $file->move($path, $filename);
                }
            }
    
            DB::commit();
    
            return response()->json(['success' => true], 200);
        }
        catch (\Exception $e) 
        {
            DB::rollback();
            throw $e;
        }
    }
    

    【讨论】:

    • 没有回来 - 使用单个文件上传没有反馈 - 非常感谢找到您的帖子并使其正常工作 - 谢谢!
    • 我大部分时间都在工作,但我不确定: :url="getUrl()" 你的 getURL 函数返回什么?帖子网址在下面的方法中。我的上传工作正常,但它没有正确地向组件报告。当我监视 QUploader 发出的事件但随后我得到一个工厂失败事件'无法读取 null 的属性 url。
    • 为了解决:url问题,我只是放了一个没有操作getUrl(){}的方法,我不再收到错误了
    猜你喜欢
    • 2019-05-22
    • 2021-12-30
    • 2022-07-03
    • 1970-01-01
    • 2023-01-30
    • 2018-04-22
    • 2021-01-21
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多