Laravel行为异常 - 显示错误的图片

16 浏览
0 Comments

Laravel行为异常 - 显示错误的图片

我有一个网站satoshirps.site

当一个新用户注册时,他的个人资料照片保持为空。

然后转到上传图片以上传个人资料照片。

返回仪表板(www.satoshirps.site/dashboard)后,用户会看到他上传的个人资料照片。现在转到删除图片以删除当前的个人资料照片,然后使用上传功能上传另一张个人资料照片。

这次返回仪表板显示旧的照片(这很奇怪)。

当我尝试这个功能时,我成功地第二次上传了图片(我在我的应用程序文件夹中检查了文件)。然后我没有得到正确的图片。是lavarel有缓存或者这是一个cookie问题。我尝试了删除浏览器的缓存和cookie,但是没有任何作用。

上传页面:




  
  上传


  @if(Session::has('success'))
      {{ Session::get('success') }}
@endif
@if(Session::has('error'))
        {{ Session::get('error') }}
@endif
  {{ Form::open(array('url' => 'upload', 'files' => true, 'method' => 'post')) }}
  {!! csrf_field() !!}
  {{ Form::file('image') }}
  {{ Form::submit('上传') }}
  {{ Form::close() }}


控制器:

middleware('auth');
  }
  /**
  * 显示应用程序仪表板。
  *
  * @return \Illuminate\Http\Response
  */
  public function index()
  {
    return view('home');
  }
  public function dashboard()
  {
    $user = Auth::user();
    return view('dashboard', compact('user'));
  }
  public function upload()
  {
    $user = Auth::user();
    return view('upload', compact('user'));
  }
  public function uploadsave(Request $request)
  {
    $user = Auth::user();
    if (Input::file('image')->isValid()) {
      $filename = 'profilepics/'.$user->username.'.jpg';
      File::delete($filename);
      $img = Image::make($_FILES['image']['tmp_name'])->encode('jpg',75)->resize(200,200)->save('profilepics/'.$user->username.'.jpg');
      $dbuser = User::where('id', $user->id)->first();
      $dbuser->photo_path = '/profilepics/'.$user->username.'.jpg';
      $dbuser->save();  //更新用户的个人资料照片位置
      Session::flash('success', '上传成功');
      return Redirect::to('upload');
    }
    else {
      // 返回带有错误消息的页面。
      Session::flash('error', '上传的文件无效');
      return Redirect::to('upload');
    }
  }
  public function deletephoto()
  {
    $user = Auth::user();
    $filename = 'profilepics/'.$user->username.'.jpg';
    File::delete($filename);
    if (file_exists($filename)) {
      echo "图片未被删除";
    } else {
      echo "图片已被删除";
    }
  }
}

路由文件:

 'web'], function () {
  Route::auth();
  Route::get('/home', 'HomeController@index');
  Route::get('/dashboard', 'HomeController@dashboard');
  Route::get('/upload', 'HomeController@upload');
  Route::post('/upload', 'HomeController@uploadsave');
  Route::get('delete', 'HomeController@deletephoto');
});

此外,如果您在删除文件后访问仪表板,您将看到您的旧个人资料照片。

请有人试一试并帮助我。

0
0 Comments

Laravel behaving madly - showing wrong images

问题原因:Laravel框架中出现了显示错误图片的问题。问题的根本原因是在删除文件时使用了错误的路径,导致无法删除目标文件。

解决方法:将图片保存在storage目录中,并通过创建路由来提供图片服务。在UsersController中创建如下路由:

public function profilePicture($user){
    $profile_picture_url = storage_path().'/profile_pictures/'.$user['id'].'/profile.jpg';
    if(!File::exists( $profile_picture_url ))
        App::abort(404);
    return Image::make($profile_picture_url)->response('jpg');
}

然后,在视图中使用Laravel的HTML和URL助手创建img标签:

HTML::image(URL::action('UsersController', array($user['id'])))

确保已安装Intervention扩展包,并按照文档进行配置。

问题可能是由于删除文件时使用了错误的路径,默认情况下,Storage::delete($filename)将从App\storage\app\public\profilepics目录中删除文件,而实际图片是存储在App\public\profilepics目录中。

在配置部分的文档中有明确说明,请仔细阅读完整的文档。

还可以尝试将图片保存在storage文件夹中,但是会遇到如何检索图片的另一个问题,因为Storage只会返回存储的图像内容,而不是文件名。

尝试通过更改config/filesystem.php中的存储路径来解决问题,但是都没有生效。

可以通过创建一个路由来解决该问题。可以查看这个链接中的代码示例:stackoverflow.com/questions/36066144/…

关于如何将URL或图片传递给视图(dashboard),可以使用内置的URL构建器URL::action('Controller', array($params))。

如果遇到类似于"Action App\Http\Controllers\HomeController not defined. (View: /home/yash/website/resources/views/dashboard.blade.php)"的错误,可以通过在路由文件中包含profilePicture来解决。

如果在dashboard页面看到空白图片,并且查看图片源码时发现类似于""的错误链接,应该将其更正为""。

问题的解决方法可能与使用的Laravel版本有关,可以参考这个链接:laravel.com/docs/5.2/helpers#method-action

以上是通过聊天继续讨论解决问题的过程,具体可以参考这个链接:chat.stackoverflow.com/rooms/106747/discussion-between-clod986-and-yash-lotan

0