我正在编写一个系统来上传和显示一些图片,但是我对上传后访问它们的正确方法感到困惑。
public function storeImage(Request $request)
{
$request->file('image')->store('public/images');
$filename = md5_file($request->file('image')) . '.' . $request->file('image')->extension();
$img = new Image;
$img->path = 'storage/images/'.$filename;
$img->save();
return back();
}
这很好用,我按照建议使用符号链接storage
但是如果我使用数据库中的$filename
变量,我得到404.生成插入内联的正确路径是什么image src属性在这里?
图片代码如下所示:
<img src="storage/images/89cdd31f2e0eeacceff96c2a0abb252f.jpeg">
该文件夹肯定是符号链接的,因为我可以在finder中关注它。
答案 0 :(得分:6)
修正了此问题。
php artisan storage:link
不适用于宅基地。而是删除文件夹,使用homestead ssh
和ln -s ~/projects/my-website/storage/app/public/ ~/projects/my-website/public/storage
在计算机上手动重新创建它们。
答案 1 :(得分:2)
您使用的是最新版本的laravel,5.3吗?
如果有,您是否尝试使用URL method from the Storage facade获取图片src网址?
示例:
use Illuminate\Support\Facades\Storage;
$url = Storage::url('file1.jpg'); //acquire URL
答案 2 :(得分:0)
文件应存储在目录storage/app/public
中,因此请确保文件存储在此目录中。
保存文件后,请确保通过将文件名作为参数传递来获取文件的url。这是我的实现方式
html表单
<form action="" method="post" id="jobImage">
<div class="form-group">
<input type="file" class="form-control" id="image" name="image">
</div>
<input type="button" value="Upload Image" onclick="uploadImage()" class="btn btn-default" />
</form>
jquery uploadImage函数
function uploadImage(){
$.ajax({
url:"{{url('/')}}/uploadImage",
headers: {
'X-CSRF-TOKEN': "{{csrf_token()}}"
},
data:new FormData($("#jobImage")[0]),
method:"POST",
processData: false,
contentType: false,
success:function(data){
console.log(JSON.stringify(data));
// alert(JSON.stringify(data));
// $('#jobImageToDisplay').attr('src', '/public/uploads/' + data.image);
$('#jobImageToDisplay').attr('src', data.url);
},
error:function(error){
console.log(error);
}
});
}
在web.php中路由
Route::post('/uploadImage','ControllerClass@uploadImage');
在Controller类
public function uploadImage(Request $request)
{
$validator = Validator::make($request->all(), [
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
if ($validator->passes()) {
$input = $request->all();
$uploadedImage = $input['image'];
// put image to storage/app/public/uploads/images
$name = Storage::put('/public/uploads/images/', $uploadedImage);
$visibility = Storage::getVisibility($name);
// set visibility to true
Storage::setVisibility($name, 'public');
// get the url of the uploaded file
$url = Storage::url($name);
// return the url
return response()->json(['url' => $url]);
}
return response()->json(['error'=>$validator->errors()->all()]);
}