2017-09-27 117 views
0

我在我的Laravel應用程序中使用Dropzone。在Dropzone中,我可以限制一次上傳的最大文件數量。但是,刷新頁面後,用戶可以上傳更多照片。在Dropzone中使用Laravel刀片 - >最大總文件上傳

Dropzone.options.addPhotosForm = { 
    maxFiles: 5, 
}; 

我能夠通過計算該用戶已經上傳至本頁面的照片數量,然後改變類顯示器,以消除前端這種能力:無;並給予警告如下:

<div class="@if(count($rooms->photos) >= 10) d-none @endif"> 
    <form action="{{ route('myroute', [$rooms->slug]) }}" method="POST" class="dropzone" id="addPhotosForm"> 
    {{ csrf_field() }} 
    </form> 
</div> 
<div class="@if(count($rooms->photos) < 10) d-none @endif"> 
    <p>You have uploaded {{ count($rooms->photos)}} photos. This is too many.</p> 
</div> 

這裏的問題是,如果用戶已上傳9張照片,他們就可以上傳5個,並獲得共14個而不是10張照片,這是所期望的最大值。此外,如果用戶是惡意的,他們可以簡單地去檢查元素,刪除顯示:無;風格和上傳儘可能多的照片,他們想要的。

我想禁用用戶在Javascript中上傳更多照片的能力,我試圖使用Laravel的Blade來做到這一點,但有一些問題。

所以,我有幾個問題:

1)我可以在Javascript中使用Blade嗎?

我已經嘗試使用這個,例如:

var count = count($rooms->photos); 

然後我得到的錯誤,

Uncaught SyntaxError: Unexpected token >

如果我能得到這個工作,我的想法是內做到這一點Dropzone選項。

init: function(file) { 
    if (count >= 10){ 
     myDropzone.removeFile(file); 
    }; 

2)是否有更好的方法來限制所有上傳到Dropzone?
我在這裏嘗試了一些建議,沒有運氣。

謝謝!

布拉德

編輯:解

感謝@Lukas和@Miguel卡布雷拉您的快速答覆!

我已經採用了基於您的輸入的解決方案。

<script type="text/javascript"> 
    var count = {{ count($rooms->photos) }}; 
    var maxFiles = 10 - {{ count($rooms->photos) }}; 
</script> 

<script type="text/javascript"> 
    Dropzone.options.addPhotosForm = { 
    maxFiles: maxFiles, 
    } 
</script> 

這個效果很好。再次感謝!! :)

回答

2

>我可以在Javascript中使用Blade嗎?

假設$客房 - >照片是一個數組或正在實施一個可數的接口,這裏是你如何通過照片算在使用刀片的javascript:

<script type="text/javascript"> 
    var count = {{ count($rooms->photos) }}; 
</script> 

2)是否有一個更好限制所有上傳到Dropzone的方法?

我認爲你的解決方案很好。只需記住有關文件上傳過多的後端保護。

1

在刀片上執行它將非常困難,並且無論哪種方式,您都必須將數據保存到某種形式的數據庫中。

我想說,你將不得不通過上傳到您的API第一,然後你將不得不添加一個字段的用戶,記錄用戶在dropzone的上傳量。然後,在API請求到達dropzone API之前,您會成功或失敗。

class DropZoneController extends Controller { 


    public function testAndUploadFile($user_id, Request $request) 
    { 

     $numUploads = DB::table('profile') 
     ->select('dZUploads') 
     ->where('user_id', '=', $user_id) 
     ->get(); 

     if($numUploads >= 5){ 
      return response('Too Many Uploads', 412); 
     } 

     else 
     { 

     $numUploads += 1; 
     $rows = DB::table('profile') 
     ->where('user_id', '=', $user_id) 
     ->update(['dZUploads' => $numUploads]); 

     if(collect($rows)->isEmpty()){ 
      return response('Not Found', 404); 
     } else { 
      return response('Success', 200); 
     } 
    } 
} 

然後成功後,您將發送文件上傳請求。您可以選擇從JavaScript或Laravel發送它。我只是發送Laravel的請求。

這將告訴你如何使用Guzzle從你的API發送http請求。 https://stackoverflow.com/a/28281787/5231528