Как сохранить изображение в подпапке с помощью Amazon aws3 |Laravel - PullRequest
0 голосов
/ 11 декабря 2018

Я использую aws для хранения своих изображений, и код в контроллере выглядит следующим образом:

Storage::disk('3')->put($file->getClientOriginalName(), fopen($file, 'r+'), 'public');

Изображения сохраняются в моем локальном хранилище.Теперь я хочу создать подпапку для упорядочения изображений.

В моем случае это регистрация бизнеса.Поэтому я хочу, чтобы изображения были сохранены в подпапке, содержащей соответствующий бизнес-идентификатор.Я пробовал это:

Storage::disk('3')->put($file->getClientOriginalName(), fopen($file, 'r+'), 'public/' . $business->id.

Подробнее о контроллере можно узнать следующим образом:

$input              = $request->all();

$files              = isset($input['file']) ? $input['file'] : array ();
$business_names     = json_decode($input['business_names'], true);
$business_details   = json_decode($input['business_details']);
$share_amount       = json_decode($input['share_amount'], true);
$entity             = json_decode($input['entity'], true);
$directors          = json_decode($input['directors'], true);
$shareholders       = json_decode($input['shareholders'], true);
$appointments       = json_decode($input['appointments'], true);

$input['user_id'] = Auth::user()->id;

Log::info(Auth::user());
Log::info($request->user());
/* Create Business Record */
$business = new Business;
$business->business_names = json_encode($business_names);
$business->share_amount = $share_amount ?: 0;
$business->entity = $entity ?: '';
$business->business_physical_address = json_encode($business_details->physical_address);
$business->has_business_postal_address = $business_details->has_postal_address;
$business->business_postal_address = json_encode($business_details->postal_address);
$business->user_id = $input['user_id'];
$business->save();

/* Create a new folder in storage/app/files named after the business ID */
Storage::makeDirectory('files/' . $business->id);

/* Upload Files */
// TODO: file storing?
foreach($files as $file) {
    if ($file) {
        Storage::disk('3')->put($file->getClientOriginalName(), fopen($file, 'r+'), 'public/' . $business->id);
        // $file->storeAs('files/' . $business->id, $file->getClientOriginalName());
    }
} 

Когда я пытаюсь сохранить бизнес сейчас, я вижу следующую ошибку:

C: \ xampp \ htdocs \ initialabandbaby \ vendor \ league \ flysystem \ src \ Adapter \ Local.php (356): подсветить \ Foundation \ Bootstrap \ HandleExceptions-> handleError (8, 'неопределенный индекс ...'), 'C: \ xampp \ htdocs ...', 356, Array)

Так как раньше я мог хранить изображения, я предполагаю, что это как-то связано с объединением бизнес-идентификатора.

Как создать подпапку с идентификатором предприятия каждый раз, когда я создаю новый бизнес и добавляю все файлы в эту же папку?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

После некоторых исследований я получил следующее:

$directory = 'public/' . $business->id;
Storage::disk()->makeDirectory($directory);

foreach($files as $file) {
    if ($file) {
        Storage::disk()->put($directory . '/' .$file->getClientOriginalName(), fopen($file, 'r+'));                   
    }
}
0 голосов
/ 12 декабря 2018

Согласно нашему обсуждению, вы можете использовать следующие 2 решения:

1) put () :

$path = Storage::disk('s3')->put(
                    '/files/'. $business->id, //path you want to upload image to S3
                    file_get_contents($request->file('file')), //fileContent
                   'public' //visibility

2) putFileAs (): Для достижения того же самого с помощью outputFileAs () мне нужно было написать его, как показано ниже.1-й параметр ожидает имя каталога, я оставил его пустым, так как я имитирую имя каталога в s3 через имя файла.

$path = Storage::disk('s3')->putFileAs(
                '', // 1st parameter expects directory name, I left it blank as I'm mimicking the directory name through the filename
                '/files/'. $business->id,
                $request->file('file'), //3rd parameter file resource
                ['visibility' => 'public'] //options
            );

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...