将本地文件从nodejs上传到Laravel服务器时获得null



我正在尝试使用 NodeJs 上传本地文件(该文件与 app.js 位于同一目录中(到远程 Laravel 服务器,但我得到的是空。由于某种原因,文件似乎无法到达服务器。我不确定我做错了什么..

这是我的节点应用文件夹结构

node_app/
├── node_modules/
├── app.js
├── screenshot.jpg
├── package.json

这是我的应用程序.js

const fs = require('fs')
const path = require('path')
const axios = require('axios')
const FormData = require('form-data')
const screenshot = require('screenshot-desktop')
let formData = new FormData()
formData.append('screenshot-file', fs.createReadStream(path.join(__dirname, 'screenshot.jpg')))
axios.post(
`https://www.myapp.com/api/upload-screenshot`,
formData,
{ headers: { 'content-type': 'multipart/form-data' } }
)

这是我的Laravel端点

class ScreenshotController extends Controller
{
public function upload(Request $request)
{
// $file is null :(
$file = $request->file('screenshot-file');
$filename = 'screenshot.jpg';
$file->move(storage_path('/uploads/screenshots/'), $filename);
return $filename;
}
}

错误:"在 null 上调用成员函数 move(( ">

当请求到达我的 Laravel 端点时,似乎没有提交"屏幕截图文件"文件,因为它显示 null。

同样使用dump($request->all());它返回一个空数组 [],这意味着没有提交任何内容。

但是,执行简单的发布请求,它确实会到达服务器

axios.post(`https://www.myapp.com/api/upload-screenshot`, {
hello: 'asdf'
})

在彻底阅读了节点.jsform-data库的文档后,我终于让它工作了。因此,我将与其他可能遇到此问题的人分享。

我传入了错误的标头,我需要首先从我的formData对象中获取标头,然后将它们传递给axios,如下所示:

function uploadScreenshot()
{
let formData = new FormData()
let stream   = fs.createReadStream(path.join(__dirname, 'screenshot.jpg'))
formData.append('screenshot-file', stream)
let formHeaders = formData.getHeaders()
axios.post('https://www.myapp.com/api/upload-screenshot', formData, {
headers: {
...formHeaders,
},
}).catch(error => {
console.log(error)
})
}

最新更新