Php 如何在Laravel中检索FormData

Php 如何在Laravel中检索FormData,php,angular,laravel-5,Php,Angular,Laravel 5,我正在将formdata从Angular 2发送到Laravel API,以保存RecordRTC js录制的语音。检查控制台上的文件名、文件类型和blob文件。它正在显示。但无法在Laravel后端代码上检索 public uploadToServer() { let blob = this.recordRTC instanceof Blob ? this.recordRTC : this.recordRTC.blob; let fileType = blob.type.s

我正在将formdata从Angular 2发送到Laravel API,以保存RecordRTC js录制的语音。检查控制台上的文件名、文件类型和blob文件。它正在显示。但无法在Laravel后端代码上检索

 public uploadToServer() {
    let blob  = this.recordRTC instanceof Blob ? this.recordRTC : this.recordRTC.blob;
    let fileType = blob.type.split('/')[0] || 'audio';
    let fileName = (Math.random() * 1000).toString().replace('.', '');
    if (fileType === 'audio') {
      fileName += '.' + (!!navigator.mozGetUserMedia ? 'ogg' : 'wav');
    } else {
      fileName += '.webm';
    }
    // create FormData
    var formData: FormData = new FormData();
    console.log(fileName);
    console.log(blob);
    console.log(fileType);
    formData.append(fileType + '-filename', fileName);
    formData.append(fileType + '-blob', blob);
    console.log(formData);
    this.recordingService.saveRecording(formData).subscribe(
      data => this.saveRecordingSuccess(data),
      error => this.saveRecordingFail(error)
    );
  }
拉威尔代码:-

 public function saveRecording(Request $request)
  {
    $fileName = '';
    $tempName = '';
    $file_idx = '';

    if (!empty($_FILES['audio-blob'])) {
        $file_idx = 'audio-blob';
        $fileName = $_POST['audio-filename'];
        $tempName = $_FILES[$file_idx]['tmp_name'];
    }
    if (empty($fileName) || empty($tempName)) {
        if(empty($tempName)) {
            echo 'Invalid temp_name: '.$tempName;
            return;
        }
        echo 'Invalid file name: '.$fileName;
        return;
    }
    $filePath = public_path('voiceRecording/' . $fileName);

    // make sure that one can upload only allowed audio/video files
    $allowed = array(
        'webm',
        'wav'
    );
    $extension = pathinfo($filePath, PATHINFO_EXTENSION);
    if (!$extension || empty($extension) || !in_array($extension, $allowed)) {
        echo 'Invalid file extension: '.$extension;
        return;
    }
    if (!move_uploaded_file($tempName, $filePath)) {
      // error code
        return;
    }
}

在laravel代码中,我没有收到任何文件和post数据。

您必须在表单上添加mime类型,就像在JQuery Ajax中一样,具有该属性

mimeType: "multipart/form-data"

您可能需要检查一些文档,这不是使用
FormData
发送文件的正确方法。编辑我的问题,请检查一次。您在Laravel中不使用
$\u文件。您应该使用
$request->file('audio-blob')
。正如@thefallen所建议的,您应该使用Laravel阅读文件上传。如果在
saveRecording
函数中执行
dd($request->files())
操作,会得到什么?它显示为空。修复了该问题。var reader=new FileReader();变量数据={};reader.readAsDataURL(this.recordRTC.getBlob());reader.onload=function(){data={value:reader.result.split(',')[1],filename:filename,fileType:fileType};console.log(reader.result.split(',')[1]);};如果你和Maneesh有同样的问题,他找到了一个解决方案,并在他的评论中说,也许这对你有帮助。他的问题在前面,我在laravel Controllert返回空响应的原因可能是任何验证、中间件或之前的任何事情,尝试调试从post到后端的数据流。虽然这也没什么帮助,但我还是设法在api上获得了表单数据,为此我苦苦挣扎了一周,很快就会发布答案