1. 程式人生 > >laravel圖片和檔案的上傳

laravel圖片和檔案的上傳

https://www.jianshu.com/p/51c290b56b0f

$file = $request::file('picfile');
    或者
    $request = $request::all(); //注意先先取全,得到的是陣列 
    $file = $request['picfile'];

1.前端頁面

  {{--<form action="upload" method="POST" enctype="multipart/form-data" >--}}
    <input type="text" size="50" name
="art_thumb">
<input id="file_upload" name="file_upload" type="file" multiple="true"> {{ csrf_field() }} <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> <script src="{{asset('uploadify/jquery.uploadify.min.js')}}"
type="text/javascript">
</script> <link rel="stylesheet" type="text/css" href="{{asset('uploadify/uploadify.css')}}"> <script type="text/javascript"> <?php $timestamp = time();?> $(function() { $('#file_upload').uploadify({ 'buttonText'
: '12圖片上傳', 'formData' : { 'timestamp' : '<?php echo $timestamp;?>', '_token' : "{{csrf_token()}}" }, 'swf' : "{{asset('uploadify/uploadify.swf')}}", 'uploader' : "{{url('/addpic')}}", //這個是提交圖片處理的地址 'onUploadSuccess' : function(file, data, response) { $('input[name=art_thumb]').val(data); $('#art_thumb_img').attr('src',data); // alert(data); } }); });
</script> <style> .uploadify{display:inline-block;} .uploadify-button{border:none; border-radius:5px; margin-top:8px;} table.add_tab tr td span.uploadify-button-text{color: #FFF; margin:0;} </style> <button>ok</button> {{--</form>--}} <img src="" alt="" id="art_thumb_img" style="max-width: 350px; max-height:100px;">

2.上傳成功之後獲取到地址,把地址賦值給input表單裡面圖片的名字,另外再給img的src屬性複製剛才上傳的地址,在頁面上吧圖片讀出來

    'onUploadSuccess' : function(file, data, response) {
                    $('input[name=art_thumb]').val(data);
                    $('#art_thumb_img').attr('src',data);
    //                                    alert(data);
                }

3.如果你用的是bootstrap輪播圖,第一個圖片要設定成class=active

  <script>
    $(function(){
        $(".item:first").addClass('active');
        //或者 $(".item").first().addClass('active');
    })
</script>

4.我自己封裝了一個圖片上傳方法

//    上傳圖片
public function uploadpic( $filename, $filepath)
{
    //        1.首先檢查檔案是否存在
    if ($request::hasFile($filename)){
        //          2.獲取檔案
        $file = $request::file($filename);
        //          3.其次檢查圖片手否合法
        if ($file->isValid()){
//                先得到檔案字尾,然後將字尾轉換成小寫,然後看是否在否和圖片的陣列內
            if(in_array( strtolower($file->extension()),['jpeg','jpg','gif','gpeg','png'])){
                //          4.將檔案取一個新的名字
                $newName = 'img'.time().rand(100000, 999999).$file->getClientOriginalName();
                //           5.移動檔案,並修改名字
                if($file->move($filepath,$newName)){
                    return $filepath.'/'.$newName;   //返回一個地址
                }else{
                    return 4;
                }
            }else{
                return 3;
            }
                        
        }else{
            return 2;
        }
    }else{
        return 1;
    }
}
// $realPath = $file->getRealPath(); //這個表示的是快取在tmp資料夾下的檔案的絕對路徑;
// $tmpName = $file -> getFileName();   //快取在tmp檔案中的檔名
// $clientName = $file -> getClientOriginalName(); //獲取檔名稱
//$extension = $file->getClientOriginalExtension();   //上傳檔案的字尾

 //不封裝,直接使用處理方法
public function store( )
{
    if ($request::hasFile('picfile')){
//          2.其次檢查圖片手否合法
        if ($request::file('picfile')->isValid()){
            $file = $request::file('picfile');
//                先得到檔案字尾,然後將字尾轉換成小寫,然後看是否在否和圖片的陣列內
            if(in_array( strtolower($file->extension()),['pdf','txt','doc','md','html'])){
//          3.獲取檔案

//          4.將檔案取一個新的名字
                $newName = 'join'.time().rand(100000, 999999).$file->getClientOriginalName();
//           5.移動檔案,並修改名字
                $file->move('uploads/join',$newName);
                $input['card_profile'] = 'uploads/join'.'/'.$newName;
                $input['created_at'] = date('Y-m-d H:i:s');
                $res = $this->recruitment->add($input);
                if ($res){
                    return back()->with('message','簡歷投遞成功');
                }else{
                    return back()->with('errors','簡歷投遞失敗');
                }
            }else{
                return back()->with('errors','字尾不符合');
            }

        }else{
            return back()->with('errors', '簡歷格式不合法');
        }
    }else{
        return back()->with('errors','沒有上傳簡歷');
    }

    }
// $realPath = $file->getRealPath(); //這個表示的是快取在tmp資料夾下的檔案的絕對路徑;
// $tmpName = $file -> getFileName();   //快取在tmp檔案中的檔名
// $clientName = $file -> getClientOriginalName(); //獲取檔名稱
//$extension = $file->getClientOriginalExtension();   //上傳檔案的字尾

5.呼叫上傳圖片的方法

//    儲存內容
public function store(\\Request $request )
{

    $input = Input::except('_token','picfile');
    $res = $this->uploadpic('picfile','uploads/images');
    switch ($res){
        case 1: return back()->with('errors','圖片上傳失敗')->withInput();
        case 2: return back()->with('errors','圖片不合法')->withInput();
        case 3: return back()->with('errors','圖片字尾不對')->withInput();
        case 4: return back()->with('errors','圖片儲存失敗')->withInput();
        default :
            $input['us_img'] = $res; //把得到的地址給picname存到資料庫
            if($this->about->add($input)){
                return redirect('about')->with('message', '釋出成功');
            }else{
                return back()->with('errors','資料填充失敗')->withInput();
            }
    }
}

6.上傳表單的列印

    我們來打印表單,`$request = $request::all();dd($request);`

會看到這個結果

Paste_Image.png

我們來執行

    $request = $request::all();dd($request['picfile']);
Paste_Image.png

接著,我們可以取物件裡面的東西

  $request = $request::all(); //注意先先取全,得到的是陣列
  $file = $request['picfile'];
  $extension = $file->extension();   //"jpeg
  $path = $file->path();   //"/private/var/tmp/phpAF4CTc"

  或者直接去file的值
  $file = $request::file('picfile');
  $extension = $file->extension();   //"jpeg
  $path = $file->path();   //"/private/var/tmp/phpAF4CTc"


作者:欒金龍
連結:https://www.jianshu.com/p/51c290b56b0f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。