簡體   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