在我的申请中,我需要:
我正在尝试开发第4个,但找到的解决方案here和here对我不起作用。
我的 filesystem.php 是:
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'visibility' => 'public',
],
'myftpsite' => [
'driver' => 'ftp',
'host' => 'myhost',
'username' => 'ftpuser,
'password' => 'ftppwd',
// Optional FTP Settings...
// 'port' => 21,
'root' => '/WRK/FILE/TEST',
// 'passive' => true,
// 'ssl' => true,
// 'timeout' => 30,
],
在Controller
我用以下文件存储文件:
... validation here ...
$path = $request->uploadfile->storeAs('', $request->uploadfile->getClientOriginalName(), self::STORAGEDISK);
$file = new TESTFile;
... db code here ...
$file->save();
此时我想检索变量以传递给下载方法(我的文件的url或路径)。我发现了两种方式
Storage::url($pspfile->filename) *return* **/storage/** accept.png
Storage::disk(self::STORAGEDISK)->getDriver()->getAdapter()->applyPathPrefix($pspfile->filename) *return* C:\xampp\htdocs\myLaravel\ **storage** \app\accept.png
任何以更好的方式做到这一点的帮助或建议都将非常感激。
修改
目前我从FTP分发本地/公共。
如果在Controller
我修改
$path = $request->uploadfile->storeAs('',
$request->uploadfile->getClientOriginalName()
,self::STORAGEDISK);
$file->fullpath = $path;
与
$file->fullpath = storage_path('app\\') . $path;
' > EM> 此外,我可以避免硬编码和使用
$file->fullpath = Storage::disk(self::STORAGEDISK)
->getDriver()
->getAdapter()
->getPathPrefix() . $path;
这样下载方法可以使用
return response()->download($pspfile->fullpath);
我仍在寻找一种方法来检索 img 标记的有效 scr 属性。
另外我想要远程存储文件(可能是本地临时目录和文件?)
答案 0 :(得分:0)
前段时间我做了类似的事情。也许这个示例代码可以帮助您。
class FileController extends Controller
{
// ... other functions ...
public function download(File $file)
{
if (Storage::disk('public')->exists($file->path)) {
return response()->download(public_path('storage/' . $file->path), $file->name);
} else {
return back();
}
}
public function upload()
{
$this->validate(request(), [
'file-upload' => 'required|file',
]);
$path = request()->file('file-upload')->store('uploads', 'public');
$file = new File;
$file->name = request()->file('file-upload')->getClientOriginalName();
$file->path = $path;
$file->save();
return back();
}
}