在Laravel中上传多张图片

In Laravel upload multi images

提问人:Adham Anwar أدهم أنور 提问时间:10/18/2023 最后编辑:Brian Tompsett - 汤莱恩Adham Anwar أدهم أنور 更新时间:10/18/2023 访问量:96

问:

我是一名移动应用程序开发人员。我在MySql中有数据库。我有这些表格。
我将导出您可以使用它们的表。
一:用户

-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Oct 17, 2023 at 11:09 PM
-- Server version: 8.0.31
-- PHP Version: 7.4.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `db_of_gp`
--

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` bigint UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'enter your email',
  `phone` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `gender` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `university` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `active` int NOT NULL DEFAULT '1',
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `name`, `email`, `phone`, `gender`, `university`, `type`, `password`, `active`, `remember_token`, `created_at`, `updated_at`) VALUES
(5, 'abu_allan', 'enter your email', '111', 'any', 'any', 'any', '123', 1, NULL, NULL, NULL);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `users_phone_unique` (`phone`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

二:公寓桌

-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Oct 14, 2023 at 01:10 AM
-- Server version: 8.0.31
-- PHP Version: 7.4.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `db_of_gp`
--

-- --------------------------------------------------------

--
-- Table structure for table `apartments`
--

CREATE TABLE `apartments` (
  `id` bigint UNSIGNED NOT NULL,
  `rooms` int NOT NULL,
  `bathrooms` int NOT NULL,
  `city` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `square_meters` int NOT NULL,
  `title` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL,
  `description` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `owner_id` int NOT NULL DEFAULT '1',
  `location` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL,
  `count_of_student` int NOT NULL,
  `price` double NOT NULL,
  `phone` varchar(12) COLLATE utf8mb4_unicode_ci NOT NULL,
  `active` int NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `apartments`
--

INSERT INTO `apartments` (`id`, `rooms`, `bathrooms`, `city`, `type`, `square_meters`, `title`, `description`, `owner_id`, `location`, `count_of_student`, `price`, `phone`, `active`, `created_at`, `updated_at`) VALUES
(1, 3, 2, 'رام الله', 'طلاب', 50, 'شقة عصرية قرب جامعة النجاح ', 'شقة جديدة بالكامل، إطلالة رائعة، أثاث عصري، حراسة 24/7، موقف سيارات خاص، خدمة غسيل الملابس.', 2, 'حي السرايا', 3, 1800, '592049730', 1, '2023-05-29 15:47:04', '2023-05-29 15:47:04'),
(3, 3, 2, 'رام الله', 'طلاب', 45, 'شقة فاخرة قرب جامعة بيرزيت', 'شقة مفروشة بالكامل، واي فاي مجاني، موقع مركزي قرب الجامعة، تكييف هواء، خدمة تنظيف أسبوعية.', 2, 'حي الطيرة', 3, 2000, '569339613', 1, '2023-05-29 16:04:54', '2023-05-29 16:04:54');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `apartments`
--
ALTER TABLE `apartments`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `apartments`
--
ALTER TABLE `apartments`
  MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

三:照片表

-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Oct 17, 2023 at 08:53 PM
-- Server version: 8.0.31
-- PHP Version: 7.4.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `db_of_gp`
--

-- --------------------------------------------------------

--
-- Table structure for table `photos`
--

CREATE TABLE `photos` (
  `id` bigint UNSIGNED NOT NULL,
  `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `apartment_id` int NOT NULL,
  `active` int NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `photos`
--

INSERT INTO `photos` (`id`, `url`, `apartment_id`, `active`, `created_at`, `updated_at`) VALUES
(63, '\"[\\\"http:\\\\\\/\\\\\\/127.0.0.1:8000\\\\\\/169740565339.png\\\"]\"', 1, 1, '2023-10-15 18:34:13', '2023-10-15 18:34:13'),
(64, '\"[\\\"http:\\\\\\/\\\\\\/127.0.0.1:8000\\\\\\/169740840238.png\\\"]\"', 3, 1, '2023-10-15 19:20:02', '2023-10-15 19:20:02');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `photos`
--
ALTER TABLE `photos`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `photos`
--
ALTER TABLE `photos`
  MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=65;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

我使用的工具是:Postman发出请求并获得响应。**
问题出:**

我尝试上传图像并从服务器获取它们,每张图像都是一个特定的公寓。

例如:
如果我在公寓表中有 image*1.png , images2.png image3.png 和 apartment1 ,apartment2,

然后我想把image1.png和image放到apartment1,把image*3放到apartment2。

在此示例中,id -> 1 和 -> 3 到 apartment_id -> 1 的照片表应如下所示: https://mydomen/public/images/apartments_image/image1.png

https://mydomen/public/images/apartments_image/image1.png

id 3 和 apartment_id -> 2 表应该是这样的

https://mydomen/public/images/apartments_image/image3.png

在Laravel中,不只使用html,JSON和API,我是移动应用程序开发人员,我使用邮递员OK。
那么如何在Laravel中使用这个问题呢?
[可选] 如果你知道 Flutter,如何为上面的响应编写代码?

我尝试了这段代码:

public  function addImageds( request $request){
    {
        $request->validate([
            'apartment_id' => 'required|exists:apartments,id',
            'images' => 'required|array',
            'images.*' => 'image|mimes:jpeg,png,jpg|max:2048',
        ]);

        $apartmentId = $request->input('apartment_id');
        $images = $request->file('images');
        $uploadedImageIds = [];

        foreach ($images as $image) {
            $path = $image->store('your_directory');

            $photo = new Photo();
            $photo->apartment_id = $apartmentId;
            $photo->url = $path;
            $photo->save();

            $uploadedImageIds[] = $photo->id;
        }

        return response()->json(['message' => 'Images uploaded successfully', 'image_ids' => $uploadedImageIds]);
    }
}

响应为 200,但路径中未保存任何照片。

我用来在路径中显示图像的另一个代码:

public function showImages($apartment_id)
{
    $photos = Photo::where('apartment_id', $apartment_id)->get();
    $imageUrls = $photos->pluck('url')->toArray();
    return response()->json(['image_urls' => $imageUrls]);
}

上面代码的响应是这样的:

空数组。

mysql json laravel sal

评论

1赞 Dale K 10/18/2023
Mysql 与 SQL Server 有很大不同,请更正您的标签
0赞 Dale K 10/18/2023
现在你的问题说你使用MySQL,但你已经标记了SQL Server?
0赞 Adham Anwar أدهم أنور 10/18/2023
我已被编辑 👍🏻
0赞 Dale K 10/18/2023
但是您使用的语法是针对 MySQL 而不是 SQL Server 的????
0赞 Adham Anwar أدهم أنور 10/18/2023
🫡 对不起,伙计,误会了

答:

0赞 Ali Ismaeel 10/18/2023 #1

这是我在 Flutter App 中使用的 Laravel 图像保存 API 示例。在我的应用程序中,图像是逐个发送的,但对于您的情况,您只需要循环执行即可。

if($request->hasFile('Image')){
        $filenameWithext=$request->file('Image')->getClientOriginalName();
        $extension=$request->file('Image')->getClientOriginalExtension();
        $fileNameToStore='image_'.round(microtime(true) * 1000).'.'.$extension;
        $path=$request->file('Image')->storeAs('public/images/apartments_image',$fileNameToStore);
    }

尝试在图像数组上使用此技术,并注意 StoreAs 生成的返回路径,您可能需要对其进行一些更改。