繁体   English   中英

通过 POST 方法上传图片 multipart/form-data

[英]Upload image multipart/form-data via POST method

我正在使用 C# 编写 API 自动化测试,得到:

“状态码:BadRequest,内容类型:应用程序/json;字符集 = utf-8,内容长度:-1)”

运行我的 API 调用时。 当我在 Postman 中运行时,它工作正常,当我将请求从 Postman 复制到 C# 时出现错误。
工作 Postman 要求:

var client = new RestClient("https://example.com/api/intake/Patients/2411b32f-0ce8-46f3-90dd-79fc57447a9a/identifications/DriverLicense/image");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Bearer xxx");
request.AddHeader("Content-Type", "multipart/form-data");
request.AddHeader("Cookie", "TS017becea=xxx");
request.AddFile("File", "C://Users//GK//Desktop//NuPogodi.PNG");
IRestResponse response = client.Execute(request);

我的,不工作的要求:

IRestClient client = new RestClient("https://example.com/api/intake/Patients/2411b32f-0ce8-46f3-90dd-79fc57447a9a/identifications/DriverLicense/image");
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData = true;
request.AddHeader("authorization", "Bearer " + GetAccessTokenStr);
request.AddParameter("boundary", Guid.NewGuid().ToString(), ParameterType.GetOrPost);
request.AddHeader("Content-Type", "multipart/form-data");
request.AddFile("File", "C://Users//GK//Desktop//NuPogodi.PNG");
Response = client.Execute(request);

我错过了什么? 我需要将图像数据转换为字节数组吗?

"{"type":"InternalServerError","message":"处理此请求时出现未知错误。","errors":{},"exception":{"ClassName":"System.ComponentModel.DataAnnotations.ValidationException ","Message":"无效的图像文件类型:application/octet-stream","Data"

谢谢你,吉恩

Laravel 8 你可以轻松调用 Multipart Api 直接使用 GuzzleHttp\Client 上传图片;

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Utils;
use File;

        $filename = $req->file('file1')->getClientOriginalName();
        $getfilePath  = $req->file('file1')->getRealPath();
        $client = new Client();
$response = $client->request('POST', 'http://127.0.0.1:8045/api/uploadImages', [
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen($getfilePath, 'r')
        ],
        // 'headers'  => [
        //      'Content-Type' => '<Content-type header>'
        //  ]
       
    ]
]);
echo $response->getStatusCode();
$bodyresponcs = $response->getBody();
$result = json_decode($bodyresponcs);
print_r($result->status);

您在视图文件中的表单

<form action="/postsubmit" method="POST" enctype="multipart/form-data" >
@csrf
<input type="file"  name="file1"   />
<button type="submit" class="btn long">Submit</button>
</form>

Api 代码在这里,这是在其他项目上制作的,这是 controller 代码 laravel 8

  <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ApiPictureUpload extends Controller
{
    //
    

    private function uploadImage11($file){

        if($file == null ){
            $path = "";
        }else{
            $path = $file->store('public/docs');
        }
        return str_replace("public/","", $path);
    }

    public function uploadImage(Request $request){
        if(!$request->hasFile('image')) {
        return response()->json(['status'=>'false','message'=>'Upload File Not Find',], 400);
        }
 
        $images = $request->file('image');

        $extension = $images->getClientOriginalExtension();
        $allowedfileExtension=['jpeg','jpg','png'];

        $check = in_array($extension,$allowedfileExtension);
 
        // if($check) {
        $path= $this->uploadImage11($images);
        return response()->json(['status'=>'true','message'=>'Image Uploaded','path'=>$path,'exe'=>$extension],200); 
        // }
        // else{
            // return response()->json(['status'=>'false','message'=>'Image Should be Jpg, Jpeg, Png'], 400);

        // }
    }
}

Api 路线代码

Route::post('/uploadImage', [ApiPictureUpload::class,'uploadImage']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM