Я использую приведенный ниже код для хранения загруженного файла
$file = $request->file($file_attachment);
$rules = [];
$rules[$file_attachment] = 'required|mimes:jpeg|max:500';
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()
->with('uploadErrors', $validator->errors());
}
$userid = session()->get('user')->id;
$destinationPath = config('app.filesDestinationPath') . '/' . $userid . '/';
$uploaded = Storage::put($destinationPath . $file_attachment . '.' . $file->getClientOriginalExtension(), file_get_contents($file->getRealPath()));
Загруженные файлы хранятся в хранилище / приложение / 2 / имя_файла.jpg
Я хочу показать пользователю загруженный им файл. Как я могу это сделать?
$ storage = Storage :: get ('/ 2 / filename.jpg');
Я получаю нечитаемые тексты. Могу подтвердить, что файл прочитан. Но как показать это как изображение пользователю.
Надеюсь, я ясно изложил свою точку зрения.
Рабочее решение
display.blade.php
<img src = "{{ URL::asset('storage/photo.jpg') }}" />
web.php
Route::group(['middleware' => ['web']], function () {
Route::get('storage/{filename}', function ($filename) {
$userid = session()->get('user')->id;
return Storage::get($userid . '/' . $filename);
});
});
Спасибо: @Boghani Chirag и @rkj
Нет, я не могу этого сделать. Информация о пользователе более конфиденциальна, и я не могу поместить ее в общую папку или облачный ...
Понятно, а как насчет того, чтобы использовать его как data-uris? Передать пользователю с помощью тега img: css-tricks.com/data-uris
вы можете сохранить имя файла в db, а затем вы можете легко найти путь для отображения в файле лезвия






Можете ли вы попробовать это
$storage = Storage::get(['type_column_name']);
что такое type_column_name
Имя столбца вашей таблицы, где путь к сохраненному изображению
Попробуй это:
Storage::disk('your_disk_name')->getDriver()->getAdapter()->applyPathPrefix('your_file_name');
Удачи !
какое здесь ваше_имя_диска
это поможет вам узнать, что laravel.com/docs/5.6/filesystem#the-public-disk
File not publicly accessible like you said then read file like this
$userid = session()->get('user')->id;
$contents = Storage::get($userid.'/file.jpg');
Предполагая, что ваш файл находится по пути storage/app/{$userid}/file.jpg
и диск по умолчанию - local проверьте config/filesystems.php
File publicly accessible
Если вы хотите сделать свой файл общедоступным, сохраните файл в этой папке storage/app/public. Вы можете создавать в нем подпапки и загружать их туда. После того, как вы сохраните файл внутри storage/app/public, вам нужно просто создать символическую ссылку, и в laravel есть для нее команда artisan.
php artisan storage:link
Это создает символическую ссылку storage/app/public на public/storage. Значит, теперь вы можете получить доступ к своему файлу вот так
$contents = Storage::disk('public')->get('file.jpg');
здесь физический путь к файлу находится на storage/app/public/file.jpg, и доступ к нему осуществляется через путь символьной ссылки public/storage/file.jpg
Предположим, у вас есть подпапкаstorage/app/public/uploads, где вы храните свои загруженные файлы, вы можете получить к нему доступ следующим образом
$contents = Storage::disk('public')->get('uploads/file.jpg');
When you make your upload in public folder then you can access it in view
echo asset('storage/file.jpg'); //without subfolder uploads
echo asset('storage/uploads/file.jpg');
подробности уточняйте https://laravel.com/docs/5.6/filesystem#configuration
Можете ли вы попробовать этот код
routes.php
Route::group(['middleware' => ['web']], function() {
Route::get('storage/storage_inner_folder_fullpath/{filename}', function ($filename) {
return Image::make(storage_path() . '/storage_inner_folder_fullpath/' . $filename)->response();
});
});
просмотреть код файла
<img src = "{{ URL::asset('storage/storage_inner_folder_fullpath/'.$filename) }}" />
Спасибо
Что такое «Изображение»? Вы не указали определение.
Не забудьте поместить свою папку в хранилище / app / public /
Создайте символическую ссылкусимвольную ссылку для доступа к этой папке
php artisan storage:link
если вы хотите получить доступ к изображениям профиля из 2 папок, сделайте это в своем файле лезвия
<img src = "{{ asset('storage/2/images/'.$user->profile_image) }}" />
Загружено вот так
$uploadedFile = $request->file('photo');
$photo = "my-prefix" . "_" . time() . "." . $uploadedFile->getClientOriginalExtension();
$photoPath = \Illuminate\Support\Facades\Storage::disk('local')->putFileAs(
"public/avatar",
$uploadedFile,
$photo
);
а затем получить доступ вот так
<img src = "{{ asset('storage/avatar/'.$filename) }}" />
Laravel 8
Контроллер
class MediaController extends Controller
{
public function show(Request $request, $filename)
{
$folder_name = 'upload';
$filename = 'example_img.jpeg';
$path = $folder_name.'/'.$filename;
if (!Storage::exists($path)){
abort(404);
}
return Storage::response($path);
}
}
Маршрут
Route::get('media/{filename}', [\App\Http\Controllers\MediaController::class, 'show']);
Создать маршрут:
Route::get('image/{filename}', 'HomeController@displayImage')->name('image.displayImage');
Создать метод контроллера:
public function displayImage($filename)
{
$path = storage_public('images/' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
}
<img src = "{{ route('image.displayImage',$article->image_name) }}" alt = "" title = "">
Вы пытались создать символическую ссылку на папку для хранения изображений из общей папки? Затем получить доступ к URL-адресу оттуда? (может потребоваться некоторая конфигурация nginx / apache, чтобы разрешить символическую ссылку на каталог) И хотя я не рекомендую это, попытался сохранить его в общей папке. Лично я предпочитаю загружать изображение после его обработки в какой-нибудь cdn или поставщик изображений, например cloudinary, и передавать URL-адрес от них.