我想為報告存盤創建 API,并且可以選擇添加多個違規者。
我有一個問題,當我添加一個違規者時,在 POSTMAN 中它顯示錯誤“呼叫成員函式 getClientOriginalName() on null”。
如何解決?或者如何正確創建一個帶有一對多關系附加資料的 API?
以下是我制作的代碼;
控制器.php
public function store(ReportRequest $request)
{
try {
$report = Report::create([
'category_id' => $request->category_id,
'user_id' => Auth::user()->id,
'title' => $request->title,
'description' => $request->description,
'incident_date' => $request->incident_date,
'injured_victims' => $request->injured_victims,
'survivors' => $request->survivors,
'dead_victims' => $request->dead_victims,
'location' => $request->location,
'latitude' => $request->latitude,
'longitude' => $request->longitude
]);
$data[] = array(
'violator_photo' => $request->file('violator_photo'),
'violator_name' => $request->violator_name,
'violator_age' => $request->violator_age,
'violator_phone' => $request->violator_phone
);
foreach ($data as $key ) {
$photo = $key['violator_photo'];
$fileName = time().'_'.$photo->getClientOriginalName();
$filePath = $photo->storeAs('images/violators', $fileName, 'public');
Violator::create([
'report_id' => $report->id,
'name' => $key['violator_name'],
'photo' => $filePath,
'age' => $key['violator_age'],
'phone' => $key['violator_phone'],
]);
}
return response()->json([
'status' => '200',
'message' => 'success',
'data' => $report,
]);
} catch (\Exception$err) {
return $this->respondInternalError($err->getMessage());
}
}

uj5u.com熱心網友回復:
用這個代碼試試
public function store(ReportRequest $request)
{
try {
$report = Report::create([
'category_id' => $request->category_id,
'user_id' => Auth::user()->id,
'title' => $request->title,
'description' => $request->description,
'incident_date' => $request->incident_date,
'injured_victims' => $request->injured_victims,
'survivors' => $request->survivors,
'dead_victims' => $request->dead_victims,
'location' => $request->location,
'latitude' => $request->latitude,
'longitude' => $request->longitude
]);
if($report){
if($request->hasFile('violator_photo')) {
$violator_photo=$request->file('violator_photo');
$fileName = time().'_'.$violator_photo->getClientOriginalName();
$filePath = $violator_photo->storeAs('images/violators', $fileName, 'public');
}
Violator::create([
'report_id' => $report->id,
'name' => $request->violator_name,
'photo' => $filePath?:'',
'age' => $request->violator_age,
'phone' => $request->violator_phone,
]);
}
return response()->json([
'status' => '200',
'message' => 'success',
'data' => $report,
]);
} catch (\Exception$err) {
return $this->respondInternalError($err->getMessage());
}
}
uj5u.com熱心網友回復:
錯誤 getClientOriginalName(),我認為這是因為“violator_photo”不是檔案,而是字串/文本
所以,如果你想在 json 請求上發送檔案,簡單的方法是將檔案轉換為 base64
在控制器上,您可以對其進行解碼并保存檔案
這是如何解碼它的示例,您需要檢查base64。一些base64編碼,添加關于檔案型別的額外資訊,例如如果檔案是影像png,資料看起來像這樣
data:image/png;base64,iVBORw0KGg..rest of base64
因此,如果資料看起來像這樣,您需要洗掉資訊并僅獲取 base64,您可以使用此代碼進行操作
$str ="base64 code";
$converted = substr($str, strpos($str,',') 1);
$image = base64_decode($base64_str);
$filename = "the file name.png"; // or you can get the extension name by the information the include on the first of base64
$path = "images/violators/";
Storage::disk('your disk')->put($path.$filename, $image, 'public');
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/390836.html
