拉拉维尔 |更改 file() 的 realPath 值
Posted
技术标签:
【中文标题】拉拉维尔 |更改 file() 的 realPath 值【英文标题】:Laravel | Change realPath value of file() 【发布时间】:2018-10-19 15:55:05 【问题描述】:是否可以更改 Laravel 文件的 realPath
属性?我实际上可以移动文件,但不能更改数据库记录,因为它被记录为旧 realPath 而不是新路径。
这是我转储 $request->file('xx'); 时得到的结果;
UploadedFile #476 ▼
-test: false
-originalName: "Screen Shot 2018-05-07 at 6.08.05 PM.png"
-mimeType: "image/png"
-size: 312932
-error: 0
#hashName: null
path: "/Applications/MAMP/tmp/php"
filename: "phpg4VH0Z"
basename: "phpg4VH0Z"
pathname: "/Applications/MAMP/tmp/php/phpg4VH0Z"
extension: ""
realPath: "/Applications/MAMP/tmp/php/phpg4VH0Z"
aTime: 2018-05-09 13:33:43
mTime: 2018-05-09 13:33:42
cTime: 2018-05-09 13:33:42
inode: 2003589
size: 312932
perms: 0100600
owner: 501
group: 80
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
这是我的代码:
public function store(UploadRequest $request)
$path = public_path('/uploads');
$project = new Project($request->all());
$project->save();
foreach ($request->file() as $file)
dd($file);
$fileName = time().'.'.$file->getClientOriginalExtension();
$file->storeAs($path, $fileName);
return $request->all();
我想将文件保存在 public/uploads 文件夹中,使用自定义名称和数据库中的相同路径/名称。因为它现在保存为/Applications/MAMP/tmp/php/phpGQhReP
。
【问题讨论】:
您似乎没有理解 PHP 是如何工作的,它首先将文件上传到临时文件,然后由您来处理其余的,实际上您不想更改realPath
你想 move / copy 文件到别处。为了做到这一点,请使用框架中已经为您完成的内容 - 阅读documentation。
@Kyslik 我知道它是如何工作的,我已经移动它了,但是无法更改 realPath 的数据库记录,这就是为什么我想更改数据库记录的 realPath。
阅读文档 - 使用$path = $request->photo->storeAs('images');
@Kyslik 正如您在上面的代码中看到的那样,我已经这样做了,但我想更改数据库记录本身。
$path = $file->storeAs...
你没有阅读文档,dd($path)
。之后更新记录,但您会遇到更多问题,因为您似乎想要保存多个文件而不仅仅是一个。你最好使用github.com/spatie/laravel-medialibrary 而不是你的魔法。
【参考方案1】:
这应该可以解决问题,它假设您的 <input
文件名为 file
:
public function store(UploadRequest $request)
if ($request->hasFile('file')) // depends on your FormRequest validation if `file` field is required or not
$path = $request->file->storePublicly(public_path('/uploads'));
Project::create(array_merge($request->except('file'), ['file' => $path])); // do some array manipulation
return $request->all();
这用于上传多个文件:
public function store(UploadRequest $request)
foreach ($request->file() as $key => $file)
if ($request->hasFile($key))
$path = $request->$key->storePublicly('/uploads');
$keys[] = $key;
$paths[] = $path;
$data = $request->except($keys);
$data = array_merge($data, array_combine($keys, $paths));
Project::create($data);
return back()->with('success', 'Project has been created successfully.');
【讨论】:
但这不会将文件移动到/uploads
文件夹。
将文件移动到哪里?
是的,它醒了,非常感谢:)【参考方案2】:
你可以像这样移动文件
$file->move(public_path('uploads'), $file->originalName);
【讨论】:
数据库记录呢,会不会有新的路径? $project->images= public_path('uploads').'/'。 $文件->原始名称; $project->save()以上是关于拉拉维尔 |更改 file() 的 realPath 值的主要内容,如果未能解决你的问题,请参考以下文章