#laravel #laravel-5
#laravel #laravel-5
Вопрос:
Я хочу загрузить файл, который уже есть в каталоге хранилища, используя код, который я хочу объединить с моим запросом.
Как я могу загрузить файл с помощью кода, передав $request->file
вручную запрос?
Приведенный ниже код, который я использую для передачи файла вручную, но в контроллере я не могу получить этот файл с помощью $request->file('image')
.
$data=[
'image' => new IlluminateHttpUploadedFile(storage_path('listing-demo/1.jpeg'),'1.jpeg'),
'input1' =>'output1',
'dummy2' =>'output2',
]
$request = new IlluminateHttpRequest();
$request->replace($data);
app(MyRepo::class)->insert($request);
В моем файле репозитория я не могу получить доступ к файлу, используя $request-> file(‘image’).
Комментарии:
1. У меня возникли большие проблемы с выяснением ситуации, когда senso создает загруженный файл из внутреннего хранилища, мне действительно интересно узнать о вашем варианте использования
2. какой файл вы хотите объединить?
3. итак, всякий раз, когда любой пользователь создается в нашей системе, я хочу вручную опубликовать 3 блога для каждого пользователя. и я повторно использую код записи в блоге, где я получаю доступ к изображению с помощью $request-> file, и я хочу использовать тот же код для публикации в блоге вручную с помощью code @gbalduzzi
4. @OMiShah файл может быть в формате jpeg, png
5. Тогда лучшим подходом было бы создать отдельный класс / функцию, которая принимает список файлов в качестве аргумента, и вызывать его с нужных вам контроллеров
Ответ №1:
Технически это должно быть возможно, но практически нет.
Загруженный файл имеет много специальных атрибутов, один из них должен быть временным файлом, который удаляется после выполнения запроса или перемещения.
Что вам нужно сделать, так это иметь функцию (в репозитории ?) которые принимают все переменные, необходимые для создания записи, одна из них — файл (или, лучше, локальная ссылка на файл) для создания записи в блоге. Вы даже можете указать пользователя в качестве аргумента.
Таким образом, вам не придется вручную отправлять запрос и вызывать контроллер.
Ответ №2:
Наконец, после стольких отладок я узнаю, что таким образом мы можем создать дубликат запроса с загруженным файловым объектом.
<?php
use AppHttpHelpersListingHelper;
use AppUser;
use IlluminateHttpRequest;
use IlluminateHttpUploadedFile;
class SampleBlogCreator
{
public function doCreate(User $user)
{
$helper = new ListingHelper($user->Store);
foreach ($this->getData() as $data) {
$request = (new Request())->duplicate($data['data'], [], [], [], $data['image']);
$helper->insert($request);
}
}
public function getData()
{
return [
[
'image' => ['image' => new UploadedFile(base_path('public/imges/listing/5.jpg'), '1.jpeg', 'image/jpg', null, true)],
'data' => ["title" => "What is Lorem Ipsum?",
"date" => now()->toDateString(),
"content" => " Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
<br>
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
.",],
],
];
}
}
Если вы хотите узнать параметр метода дублирования, перейдите к этому файлуvendor/laravel/framework/src/Illuminate/Http/Request.php
Ответ №3:
//write in the view blade
<input type="file" class="uploads form-control" name="cover">
//
// write it in your controller
if($request->file('cover')) {
$file = $request->file('cover');
$dt = Carbon::now();
$acak = $file->getClientOriginalExtension();
$fileName = rand(11111,99999).'-'.$dt->format('Y-m-d-H-i-s').'.'.$acak;
$request->file('cover')->move("public/images", $fileName);
$cover = $fileName;
}else {
$cover = NULL;
}
$data = new Image(); //model your databse
$data->image = $cover;
$data->save();
}