#laravel #file-upload
#laravel #загрузка файла
Вопрос:
я использую сайт laravel, и в моем файле у меня есть каталог в path /var/www/site/admin.site.com/public/storage/ salescall мне нужно загрузить файл в эту папку salescall, я использовал следующий код.
$filenameWithExt = $request->file('sales_call')->getClientOriginalName();
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
$extension = $request->file('sales_call')->getClientOriginalExtension();
$filenameToStore = $filename . '-' . time() . '.' . $extension;
$request->file('sales_call')
->storeAs('', $filenameToStore, 'sales');
и мой filesystems.php заключается в следующем
‘диски’ => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => env('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
],
'sales' => [
'driver' => 'local',
'root' => public_path('salescall'),
'visibility' => 'public',
],
],
файл не загружен в папку. пожалуйста, помогите мне решить эту проблему. Заранее благодарю вас.
Ответ №1:
Вы можете легко это сделать:
$request->file('sales_call')-> storeAs('salescall/',$filenameToStore);
ДЛЯ ЛУЧШЕГО ПОНИМАНИЯ СМ. НИЖЕ
Конфигурация вашей файловой системы кажется неверной. Используйте приведенный ниже пример в качестве руководства, и я надеюсь, что он вам поможет.
Если вы используете этот код, он загрузит ваш файл в папку storage / app
Storage::disk('local')->put('file.txt', 'Contents');
Теперь, если вам нужно изменить каталог и сохранить его непосредственно в папке хранения, вам нужно что-то изменить в filesystems.php досье.
Перейдите к config/filesystems.php файл и измените следующий код-
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
Здесь эта строка кода ‘root’ => storage_path (‘app’), отвечающая за определение места хранения. Вы просто настраиваете в соответствии с вашими требованиями.
В качестве альтернативы, в вашем контроллере вы могли бы сделать что-то вроде этого:
<?php
namespace AppHttpControllersApi;
use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesStorage;
class UserAvatarController extends Controller
{
/**
* Handle the incoming request.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function __invoke(Request $request)
{
$request->validate([
'avatar'=> ['required','max:200']
]);
$user = User::findOrFail(auth()->user()->id);
// Handle file Upload
if($request->hasFile('avatar')){
//Storage::delete('/public/avatars/'.$user->avatar);
// Get filename with the extension
$filenameWithExt = $request->file('avatar')->getClientOriginalName();
//Get just filename
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
// Get just ext
$extension = $request->file('avatar')->getClientOriginalExtension();
// Filename to store
$fileNameToStore = $filename.'_'.time().'.'.$extension;
// Upload Image
$path = $request->file('avatar')->storeAs('public/avatars',$fileNameToStore);
$user->avatar = $fileNameToStore ;
$user->save();
}
return $user;
}
}
Но в вашем собственном случае, я считаю:
- В вашей конфигурации установите корневой ключ в storage_path(‘salescall’)
- Ваш должен быть $path = $request->file(‘sales_call’)->storeAs(‘public / salescall’,$fileNameToStore);
Просто дайте мне знать, если это сработает.. Приветствия!
Комментарии:
1. я переключился на ‘local’ => на ‘root’ => storage_path(‘salescall’) и использовал $request->file(‘sale_call’)-> storeAs(‘public / salescall’,$fileNameToStore); но в папку ничего не загружается
2. Является ли имя файла в теле запроса sales_call?
3. Пожалуйста, сделайте скриншот необходимых файлов.
4. да, имя файла — sales_call . я также приложил скриншоты
Ответ №2:
Вы должны использовать так
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'permissions' => [
'file' => [
'public' => 0664,
'private' => 0600,
],
'dir' => [
'public' => 0775,
'private' => 0700,
],
],
],
$request->file('sales_call')-> storeAs('salescall/',$filenameToStore);
Комментарии:
1. я переключился на ‘local’ => на ‘root’ => storage_path(‘salescall’) и использовал $request->file(‘sale_call’)-> storeAs(‘salescall /’, $ filenameToStore); но ничего не загружается в папку
2. @user2830078 Я обновил свой ответ. Пожалуйста, проверьте еще раз