微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 请求中缺少反应 axios POST 文件

如何解决Laravel 请求中缺少反应 axios POST 文件

我正在尝试使用 ReactLaravel API 发送文件

React 方面,我首先让用户使用 React Dropzone

添加文件

我从 React Dropzone onDrop 方法获取文件

handleUpload = async files => {
  const file = files[0]
}

然后我使用 axios 将该文件以及一些额外的数据POST 发送到 Laravel API 端点

let formData = new FormData()

formData.append('pdf',file)
formData.append('data',JSON.stringify({ text: 'Hello World' }))

const config = {
  headers: {
    'Authorization': 'Bearer BEARER_TOKEN_GOES_HERE'
  }
}

await axios.post(someUrl,formData,config)

Laravel API 端点中,我可以看到请求中的 POST 数据

return response()->json([
  'files' => $request->allFiles(),'pdf' => $request->file('pdf'),'request' => $request->all(),'_files' => $_FILES,]);

上面的结果是:

{
  files: {
    pdf: {}
  }
  pdf: {}
  request: {
    data: "{"text":"Hello World"}",pdf: {}
  }
  _files: {
    pdf: {
      error: 0
      name: "Some File.pdf"
      size: 182552
      tmp_name: "/tmp/PHPVRSJV3"
      type: "application/pdf"
    }
  }
}

如您所见,如果我使用 $_FILES

访问该文件,则该文件存在

但是,使用 Laravel$request->file('pdf')$request->allFiles()文件不存在。

--

我尝试在 axios 端更改 React 的配置并添加

const config = {
  headers: {
    'Authorization': 'Bearer BEARER_TOKEN_GOES_HERE','Content-Type': 'multipart/form-data'
  }
}

但是无论如何都会自动添加表单边界

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxxXxXxXxXXXxx0

我也尝试将数据添加标题中,如下所示:

const config = {
  headers: {
    'Authorization': 'Bearer BEARER_TOKEN_GOES_HERE',},data: formData
}

但这也不起作用。

我也尝试了上述的不同组合,但没有成功。

为什么我可以使用 $_FILES 而不是 $request->file('pdf') 看到它的任何想法

--

此外,下面给了我这些奇怪的结果:

return response()->json([
  'file_pdf' => $request->file('pdf'),'file_pdf_arr' => (array) $request->file('pdf'),'req_pdf' => $request->pdf,'req_pdf_arr' => (array) $request->pdf,]);
{
  file_pdf: {}
  file_pdf_arr: {
    *hashName: null
    Symfony\Component\HttpFoundation\File\UploadedFileerror: 0
    Symfony\Component\HttpFoundation\File\UploadedFilemimeType: "application/pdf"
    Symfony\Component\HttpFoundation\File\UploadedFileoriginalName: "Some File.pdf"
    Symfony\Component\HttpFoundation\File\UploadedFiletest: false
  }
  req_pdf: {}
  req_pdf_arr: {
    *hashName: null
    Symfony\Component\HttpFoundation\File\UploadedFileerror: 0
    Symfony\Component\HttpFoundation\File\UploadedFilemimeType: "application/pdf"
    Symfony\Component\HttpFoundation\File\UploadedFileoriginalName: "Some File.pdf"
  }
}

解决方法

$request->pdf$request->file('pdf') 访问该文件时,该文件在那里

如果我回来可以确认:

return response()->json([
  'req_file' => $request->file('pdf')->getClientOriginalName(),'req_pdf' => $request->pdf->getClientOriginalName(),]);

返回文件名。

我认为问题是由于 response()->json() 的性质和它可能具有的一些限制造成的。

如果有人能解释原因,那将非常有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。