請教大大!任何協助都將銘感於心。
我有一個 laravel 6.* 的項目,有個功能需求:讓客戶上傳 .csv 檔案,
上傳後我的laravel 會幫用戶發出簡訊,但我想限制用戶上傳的手機號筆數,以免讓系統負荷過重,請問我該怎麼做?
PS1: .csv 檔案中 只使用 A欄位,逐列填寫手機號碼(希望限制列數),
PS2:我最主要不會的地方是:拿到file後不知道怎麼計算檔案內容的筆數,ex:
在我的controller 的 方法中,如下:
public function checkQty(Request $request, $act_id)
{
$user = $request->user();
$act = Act::findOrFail($act_id);
$file = $request->file;
$limitQty = 1000;
// 我希望這裡下判斷,但不會的就是這裡了!
if ($file 的筆數 > $limitQty) {
// 發簡訊
} else {
return redirect(url('/'))->with('flash_alert', '資料過多!');
}
}
前端能做到嗎?或者後端能做到嗎?衷心希望路過的大神指點迷津
簡單的做法給你參考
1.限制行數:基本來說只要看換行多少大約筆數就在那左右了。
2.限制容量:這招其實算最快的。你可以不用管筆數。畢竟檔案上傳就可以得到容量了。
不過一般並不建議傳檔就直接發。連返悔的機會都沒有。
正常的做法是上傳了先建立好資料。確定筆數及內容後。
再做發送的動作。這樣會比較安全。
謝謝星空大大,但是我必須要拿到筆數,因為發簡訊是依照數量計費的
所以你沒注意我後面說的話。
算了,等你發生事情就會懂了。
正規來說,你需要有CSV相關的解檔。一般大多數都是用EXCEL系列的。
這樣才可以得到正確的資料及筆數。
沒有的話,就得依照你的CSV格式來判斷。
大多數來說,依CSV來說,通常一個換行就是一筆資料。
所以可以用
$datas = explode(PHP_EOL,$file);//依換行拆解成陣列
$num = count($datas);//取得陣列數量
這是算比較簡單的方式。不過有些CSV有特別的換行關係。如用「;」做結束。
你要自行學會如果轉變。
如果要再多驗証資料的正確性。
是可以再跑一下FOREACH來做判斷處理。