Validate kích thước file ảnh khi upload trong Symfony

Em đang làm 1 project về Symfony mà khách yêu cầu ở trong trang Admin, khi thực hiện upload file sử dụng VichUploader bundle thì phải check 2 điều kiện:

  1. Định dạng file phải là file ảnh
  2. Width < 150px, Height < 900px

Em ngồi 3 ngày rồi mà vẫn chưa ra đc hướng giải quyết :frowning: các bác giúp e với

Có hai cách giải quyết:

  1. Cách cũ: phải upload lên được rồi mới giải quyết, thời mà HTML5 chưa thông dụng. Khi upload ảnh lên rồi, bản thân Symfony không làm gì được, ta sử dụng thư viện xử lý ảnh là GD (tức gd2) hoặc ImageMagick được cài trên server để thao tác với ảnh. Nếu nó to quá thì resize lại hoặc crop hoặc thông báo kích thước to, vứt bỏ.

  2. Cách mới: dùng JavaScript để kiểm tra kích thước trước khi upload, như này http://jsfiddle.net/xnkhN/ , nhưng luôn luôn phải kiểm tra lại trên phía server bởi vì phía client có thể bị chỉnh chọc.

4 Likes

Mình hỏi ké luôn là có cách để validate ngay khi file được upload mà không cần chờ nó upload xong không, lỡ người ta upload file cực khủng để phá hoại thì sao nhỉ?

3 Likes

Ảnh chưa up xong thì không tính kích thước được, nhưng mà ảnh Width < 150px, Height < 900px thì cũng nhỏ, giới hạn dung lượng 1~2MB là được, thêm timeout nữa cho chắc. Sau khi up xong thì tính kích thước rồi quyết định xoá hay giữ.

5 Likes

Muốn chặn up file quá lớn thì:

  1. Chặn ở front-end trước, check luôn định dạng file, kích thước ảnh. dropzonejs
  2. Set limit file upload size, webserver như nginx apache có hỗ trợ.

p/s: Có thể xác định định dạng file và kích thước khi upload chỉ vài bytes đầu lên server.
https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_PNG_files
Vd thằng .png thì 8 bytes đầu luôn là 137 80 78 71 13 10 26 10
4+4 bytes tiếp theo chứa thông tin về width và height.
Ko biết các định dạng khác nó có lưu meta data ở đầu file như này ko

5 Likes

Giờ mới biết là ngoài định dạng file, những bytes đầu còn chứa cả kích thước đối với ảnh.
Xem lại getimagesize() mới thấy bên dưới phần ví dụ có nói để cách đọc kích thước nhanh cho jpg và png.

Ps: Tìm hộ thớt thư viện đầy đủ để sài luôn đây: https://github.com/marc1706/fast-image-size

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?