Laravel 中的文件上传
File uploads in Laravel
我刚开始使用 Laravel 并尝试使用 Dropzone JS 进行文件上传。我可以成功上传文件,但它们会登陆 app/Http/Controllers
,在那里它们无法公开访问。
它似乎把这个目录当作根目录,所以如果我指定 /uploads 作为文件夹,那么它们将进入 app/Http/Controllers/uploads
(这显然也不好)。使用 ..
s 似乎没有任何效果。
这是我上传文件的存储方法:
$ds = DIRECTORY_SEPARATOR;
$storeFolder = '';
if ( ! empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
$targetFile = $targetPath. $_FILES['file']['name'];
move_uploaded_file($tempFile,$targetFile);
}
我也尝试了一些我发现的其他方法(如下),但我在 Chrome 的元素检查器中遇到了 500 个错误。
来自官方文档
$path = $request->file('file')->store('uploads');
来自我找到的教程
$file = $request->file('file');
$destinationPath = '/';
$file->move($destinationPath,$file->getClientOriginalName());
来自另一个教程
$uploadedFile = $request->file('file');
$filename = time().$uploadedFile->getClientOriginalName();
Storage::disk('local')->putFileAs(
'/'.$filename,
$uploadedFile,
$filename
);
目前的方法看起来不错,但只需要将文件存储在public/uploads。
改为使用此路径:
$targetPath = public_path().'/uploads/';
我还建议为我们的存储路径创建一个完美的路由,这样当有人添加时 hostname/storage 它不会向其他人显示您的目录,只有文件可以访问
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $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;
});
我刚开始使用 Laravel 并尝试使用 Dropzone JS 进行文件上传。我可以成功上传文件,但它们会登陆 app/Http/Controllers
,在那里它们无法公开访问。
它似乎把这个目录当作根目录,所以如果我指定 /uploads 作为文件夹,那么它们将进入 app/Http/Controllers/uploads
(这显然也不好)。使用 ..
s 似乎没有任何效果。
这是我上传文件的存储方法:
$ds = DIRECTORY_SEPARATOR;
$storeFolder = '';
if ( ! empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
$targetFile = $targetPath. $_FILES['file']['name'];
move_uploaded_file($tempFile,$targetFile);
}
我也尝试了一些我发现的其他方法(如下),但我在 Chrome 的元素检查器中遇到了 500 个错误。
来自官方文档
$path = $request->file('file')->store('uploads');
来自我找到的教程
$file = $request->file('file');
$destinationPath = '/';
$file->move($destinationPath,$file->getClientOriginalName());
来自另一个教程
$uploadedFile = $request->file('file');
$filename = time().$uploadedFile->getClientOriginalName();
Storage::disk('local')->putFileAs(
'/'.$filename,
$uploadedFile,
$filename
);
目前的方法看起来不错,但只需要将文件存储在public/uploads。
改为使用此路径:
$targetPath = public_path().'/uploads/';
我还建议为我们的存储路径创建一个完美的路由,这样当有人添加时 hostname/storage 它不会向其他人显示您的目录,只有文件可以访问
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $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;
});