Phần lớn biểu mẫu tải lên báo mọi thất bại bằng đúng một câu. Câu đó đang che giấu ít nhất bốn phép kiểm tra khác nhau, và mỗi cái có một cách sửa riêng.
Kiểm tra một: giới hạn số byte
Đây là giới hạn phổ biến nhất, và cũng là cái duy nhất người ta thường nghĩ tới. Nó đo bằng byte chứ không phải megapixel, nên một tấm ảnh trông nhỏ chụp thẳng từ điện thoại đời mới vẫn có thể trượt như thường.
Cách sửa là nén xuống một con số thấp hơn ngưỡng được công bố — chứ không phải đúng bằng ngưỡng. Có hệ thống đo kích thước của yêu cầu đã mã hóa chứ không đo tệp, mà một lượt tải lên được mã hóa base64 trên đường đi thì lớn hơn tệp trên ổ đĩa khoảng một phần ba. Nhắm thấp hơn ngưỡng vài phần trăm gần như chẳng tốn gì mà lại dẹp hẳn được câu hỏi này.
Kiểm tra hai: giới hạn kích thước ảnh
Đây là chuyện tách rời khỏi dung lượng tệp, và thường không được ghi ra ở đâu cả. Một biểu mẫu có thể đòi ảnh rộng không quá 1200 pixel bất kể tệp nhẹ đến đâu. Nén mạnh thêm sẽ không bao giờ thỏa mãn nó — bạn phải thu nhỏ ảnh. Nếu biểu mẫu có nêu kích thước hiển thị, thường nó cũng áp một mức tối đa quanh con số đó.
Kiểm tra ba: kiểu MIME
Những máy chủ cẩn thận không tin phần mở rộng của tên tệp; chúng đọc vài byte đầu tiên và nhận diện
định dạng qua chữ ký của tệp. Đổi tên một tệp PNG thành .jpg thì máy chủ chặt chẽ vẫn thấy một tệp
PNG, vì các byte nói vậy.
Đó là lý do chuyển đổi định dạng có tác dụng còn đổi tên thì không. Đó cũng là lý do một tệp được xuất từ phần mềm thiết kế dưới nhãn “JPEG” vẫn có thể trượt: vài trình xuất ghi ra một biến thể mà thư viện của máy chủ từ chối.
Kiểm tra bốn: không gian màu và biến thể mã hóa
Hiếm gặp hơn, nhưng có thật. JPEG hệ CMYK, PNG 16 bit và JPEG progressive đều là những tệp hợp lệ mà một số thư viện phía máy chủ đời cũ thẳng thừng từ chối.
Mã hóa lại sẽ sửa được những trường hợp nó với tới. ToolZool giải mã về điểm ảnh 8 bit thuần và ghi ra JPEG baseline theo mặc định, nên một tệp PNG 16 bit sẽ trở về 8 bit và một tệp JPEG progressive sẽ trở về baseline — cả hai đều là biến thể mà một máy chủ khó tính dễ chấp nhận nhất. JPEG hệ CMYK là ca khó chịu: nó là tệp dành cho quy trình in ấn chứ không phải cho web, và cách sửa chắc chắn là xuất lại nó ở hệ RGB từ chính phần mềm đã tạo ra nó.
Cách phân biệt chúng
Hãy thử một tấm ảnh kiểm tra cố tình làm thật nhỏ: vài kilobyte, vài trăm pixel, JPEG baseline thuần. Nếu tấm đó tải lên được thì vấn đề nằm ở tệp của bạn, và giờ bạn đã biết cần thay đổi theo hướng nào — hãy bắt đầu với bộ nén, còn nếu giới hạn thuộc loại gắt gao thì bài đưa ảnh về dưới giới hạn 50 KB nói về thứ tự nên thay đổi mọi thứ. Nếu ngay cả ảnh kiểm tra cũng trượt thì vấn đề nằm ở biểu mẫu, ở phiên đăng nhập hoặc ở trình duyệt, và có mã hóa lại bao nhiêu lần cũng vô ích.

