如何解决Laravel 请求中缺少反应 axios POST 文件
我正在尝试使用 React
向 Laravel
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 举报,一经查实,本站将立刻删除。