无法将文件从 Postman 发送到 Laravel API
Cannot send file from Postman to Laravel API
我正在尝试从 postman 向我的 laravel API 发送图像。
我在请求正文中添加了文件(280KB),如下所示:
在服务器端,我试图捕获文件并保存它,但是 returns 没有文件。
public function uploadImage(Request $request)
{
//returns false
$request->hasFile('profile_image');
//returns profile_image is required
$request->validate(['profile_image' => 'required|image:jpeg,png,jpg,gif,svg']);
//returns null
$request->file('profile_image');
}
我正在从 api.php 调用函数,如下所示:
Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);
我想也许我不应该把文件放在正文中,但找不到替代方案。
此外,我终于尝试从 vue 客户端发送文件,但我在尝试从那里发送文件时遇到了同样的问题。
如何让服务器捕获文件?
编辑:调整示例代码中的拼写错误
新代码示例
我将方法从 put 更改为 post,因为我也想测试 post 方法。我也试过 _method 预先放入 postman 。
这是 Laravel 上的代码示例:
//api.php
Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);
//CreatorController.php
public function uploadImage(Request $request)
{
if($request->hasFile('profile_image')){
$allowedfileExtension=['gif','jpg','png'];
$file = $request->file('profile_image');
$extension = $file->getClientOriginalExtension();
if(in_array($extension,$allowedfileExtension)) {
$path = $file->store('public/images/profile');
$path_url = $path;
return ["image_url" => $path_url, "image" => $request->file('profile_image')];
}
return false;
}
}
$request->hasFile('profile_image')
returns true,但是$request->file('profile_image')
returns null,保存图片失败。
我的 vue 客户端代码(如果它可能有用的话):
if(this.profile_image != null){
let data = new FormData();
data.append('profile_image', this.profile_image)
axios
.post('http://localhost:8000/api/creators/'+uid+'/upload_image', data, head)
.then(
response => (
//successfully receives the image_url
this.creatorData.image_url = response.data.image_url,
console.log(response.data)
),
)
.catch(
error => (
localStorage.setItem('error', error),
console.log(error.response)
),
this.loading = false,
)
}
客户端实际收到“image_url”,但图像未保存在laravel。
laravel不支持直接put方法。
您必须使用 post 方法,然后将 _method 传递给您的 laravel 项目
like this picture
我正在尝试从 postman 向我的 laravel API 发送图像。
我在请求正文中添加了文件(280KB),如下所示:
在服务器端,我试图捕获文件并保存它,但是 returns 没有文件。
public function uploadImage(Request $request)
{
//returns false
$request->hasFile('profile_image');
//returns profile_image is required
$request->validate(['profile_image' => 'required|image:jpeg,png,jpg,gif,svg']);
//returns null
$request->file('profile_image');
}
我正在从 api.php 调用函数,如下所示:
Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);
我想也许我不应该把文件放在正文中,但找不到替代方案。
此外,我终于尝试从 vue 客户端发送文件,但我在尝试从那里发送文件时遇到了同样的问题。
如何让服务器捕获文件?
编辑:调整示例代码中的拼写错误
新代码示例
我将方法从 put 更改为 post,因为我也想测试 post 方法。我也试过 _method 预先放入 postman 。
这是 Laravel 上的代码示例:
//api.php
Route::put('/creators/{id}/upload_image',[CreatorController::class,'uploadImage']);
//CreatorController.php
public function uploadImage(Request $request)
{
if($request->hasFile('profile_image')){
$allowedfileExtension=['gif','jpg','png'];
$file = $request->file('profile_image');
$extension = $file->getClientOriginalExtension();
if(in_array($extension,$allowedfileExtension)) {
$path = $file->store('public/images/profile');
$path_url = $path;
return ["image_url" => $path_url, "image" => $request->file('profile_image')];
}
return false;
}
}
$request->hasFile('profile_image')
returns true,但是$request->file('profile_image')
returns null,保存图片失败。
我的 vue 客户端代码(如果它可能有用的话):
if(this.profile_image != null){
let data = new FormData();
data.append('profile_image', this.profile_image)
axios
.post('http://localhost:8000/api/creators/'+uid+'/upload_image', data, head)
.then(
response => (
//successfully receives the image_url
this.creatorData.image_url = response.data.image_url,
console.log(response.data)
),
)
.catch(
error => (
localStorage.setItem('error', error),
console.log(error.response)
),
this.loading = false,
)
}
客户端实际收到“image_url”,但图像未保存在laravel。
laravel不支持直接put方法。 您必须使用 post 方法,然后将 _method 传递给您的 laravel 项目
like this picture