[英]Laravel Multiple Image Upload via API
我正在创建媒体 API,这是第一次创建 API。
我有这个代码:
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\UploadRequest $request
* @return \Illuminate\Http\Response
*/
public function store(UploadRequest $request)
{
if(!$request->hasFile('fileName')) {
return response()->json(['upload_file_not_found'], 400);
}
$file = $request->file('fileName');
if(!$file->isValid()) {
return response()->json(['invalid_file_upload'], 400);
}
if($request->hasfile('fileName'))
{
$media = new Media();
$data = array();
foreach($request->file('fileName') as $image)
{
$rdm = uniqid(5);
$name= $rdm .'-'.$image->getClientOriginalName();
$image->move(public_path().'/images/', $name);
$data[] = $name;
}
$media->fileName = json_encode($data);
$media->clientId = $request->clientId;
$media->uploadedBy = Auth::user()->id;
$media->save();
}
return ["success" => "Your media file has been successfully uploaded"];
}
请你能帮我为什么它不将图像上传到公共路径。 它也不在数据库中存储任何内容。 发送我的 POST 请求时,我从 postman 收到 200 个代码,但是数据库有一个空数组作为文件名?
**** 编辑 ****
我正在上传多张图片。 因为我正在为移动应用程序制作 api,所以没有这样的表格。 该请求是对 URL /api/v1/media 的 POST 请求
这是我想出的解决方案:)
这将上传多个文件并检查扩展名中的有效文件。
public function store(UploadRequest $request)
{
if(!$request->hasFile('fileName')) {
return response()->json(['upload_file_not_found'], 400);
}
$allowedfileExtension=['pdf','jpg','png'];
$files = $request->file('fileName');
$errors = [];
foreach ($files as $file) {
$extension = $file->getClientOriginalExtension();
$check = in_array($extension,$allowedfileExtension);
if($check) {
foreach($request->fileName as $mediaFiles) {
$media = new Media();
$media_ext = $mediaFiles->getClientOriginalName();
$media_no_ext = pathinfo($media_ext, PATHINFO_FILENAME);
$mFiles = $media_no_ext . '-' . uniqid() . '.' . $extension;
$mediaFiles->move(public_path().'/images/', $mFiles);
$media->fileName = $mFiles;
$media->clientId = $request->clientId;
$media->uploadedBy = Auth::user()->id;
$media->save();
}
} else {
return response()->json(['invalid_file_format'], 422);
}
return response()->json(['file_uploaded'], 200);
}
}
public function store(Request $request)
{
if ($this->getErrorIfAny($request->all(), $this->ruls)) {
return $this->getErrorIfAny($request->all(), $this->ruls);
}
if (!$request->hasFile('image_url')) {
return response($this->getResponseFail(trans('my_keywords.uploadFileNotFound'), false), 400);
}
$allowedfileExtension = ['jpg', 'png', 'jpeg'];
$files = $request->file('image_url');
$number_photos_upload = count($files);
$pictures_available_upload = array();
for ($i = 0; $i < count($files); $i++) {
$extension = $files[$i]->getClientOriginalExtension();
$check = in_array($extension, $allowedfileExtension);
if ($check) {
$pictures_available_upload[$i] = $files[$i];
}
}
$number_images_success_uploded = 0;
$images_urls = array();
for ($i = 0; $i < count($pictures_available_upload); $i++) {
$image = $pictures_available_upload[$i];
$path = config('paths.storage_path') .
$image->store(config('paths.store_image_path'), 'public');
//store image file into directory and db
$store_images = new StoreImages();
$store_images['store_id'] = $request['store_id'];
$store_images['image_url'] = $path;
$result = $store_images->save();
if ($result) {
$images_urls[$i] = $path;
$number_images_success_uploded = $number_images_success_uploded + 1;
}
}
if ($number_images_success_uploded == 0) {
return response($this->getResponseFail(trans('my_keywords.invalidFileFormat'), false), 422);
} else {
$data = [
'store_id' => (int) $request['store_id'],
'number_photos_upload' => $number_photos_upload,
'number_images_success_uploded' => $number_images_success_uploded,
'images' => $images_urls,
];
return response($this->getResponse(__('my_keywords.operationSuccessfully'), true, $data), 200);
}
}
作为api发送二进制文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.