在 POSTMAN 上使用 PUT 方法上传文件

Posted

技术标签:

【中文标题】在 POSTMAN 上使用 PUT 方法上传文件【英文标题】:Upload a file with PUT method on POSTMAN 【发布时间】:2019-06-17 04:01:43 【问题描述】:

您好,当我尝试在邮递员中更新图像时出现错误

我的控制器

   $validator =    Validator::make($request->all(), [
    'category_id'=> 'required',      
    'product_name'=> 'required', 
    'product_description'=> 'required',      
    'product_img'=> 'required' 
 ] );
    if ($validator -> fails()) 
        return $this->sendError('error validation', $validator->errors());
    
    $product = Product::findOrFail($id) ;

    $product->category_id = $request->input('category_id');
    $product->subcat_id = $request->input('subcat_id');
    $product->product_name = $request->input('product_name');
    $product->product_description = $request->input('product_description');
    $product->product_properties = $request->input('product_properties');
    $product->product_img =  $request->file('product_img')->store('images');
    $product->product_pdf =  $request->file('product_pdf')->store('files');
    if($product->update())
        return $this->sendResponse($product->toArray() , 'Product Updated Succesfully');
    

我的邮递员行

"product_img":"Downloads/screencapture-file-C-Users-gkpro-Desktop-ui-Semantic-UI-master-examples-navbar-html-2019-01-03-20_31_47.png"

我收到这个错误

在 null 上调用成员函数 store()

【问题讨论】:

请向我们展示整个控制器。还要添加一个 dd($request->all());在您的更新中作为控制器的第一行并在此处添加结果 @Indra 我更新了我的控制器但 dd($request->all()) 返回空 @Indra 问题是我想在 postman 中使用 json 更新图像,而在 post 方法中我使用表单数据,但我不能通过 put 方法使用表单数据 从技术上讲,整个方法是错误的,因为图像应该单独处理,有一个单独的表、模型、控制器并存储在一个存储桶中,但是由于您这样做,您实际上无法上传图片。但是,您可以更改更新方法以使用 post 并且这将起作用,但这将是一个 hack。并且验证应该在一个单独的请求文件中完成。 【参考方案1】:

如果你想使用表单数据通过 PUT 方法上传图片,这里的窍门,

在表单数据中添加_method: PUT

【讨论】:

如果你使用PUT方法你不能使用form-data,你必须使用x-www-form-urlencoded。你试过我的解决方案了吗?

以上是关于在 POSTMAN 上使用 PUT 方法上传文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JMeter 使用 REST API Put 方法上传文件

PUT 上传文件到 AWS S3 预签名 URL Retrofit2 Android

Postman请求发送—PUT&DELETE

使用 API PUT 请求上传文件

关于postman使用上发现的一点问题

接口测试-Http状态码-postman上传文件