1

我尝试使用 JQuery 创建一个真实的文件类型验证。我想检查我的图像是 JPG 还是 PNG。这是我的功能:

function validate_file(file) {
    if(file.type.match("image/jpeg") || file.type.match("image/png")) {
     return true;
    }
    else {
      alert("Formats supportés : jpeg et png");
      return false;
    }
}

“exemple_1.jpg”为真,“exemple_2.pdf”为假。如果我将第二个文件重命名为“exemple_2.jpg”,那是真的……但必须是假的!

我想测试该文件是真正的 JPG 还是 PNG。我的图像是在 HTML5 画布上绘制的。

任何想法 ?

更新 :

这是加载图像的功能

img.onload = function() {
    // Resize images (width)
    if (img.width > max_width) {
        ratio = max_width / img.width;
        width = max_width;
        height = img.height * ratio;
    }
    else {
        width = img.width;
    }

    // Resize images (height)
    if (img.height > max_height) {
        ratio = max_height / img.height;
        height = max_height;
        width = img.width * ratio;
    } 
    else {
        height = img.height;
    }

    // Adjust canvas
    canvas.width = width;
    canvas.height = height;

    // Draw canvas
    ctx.drawImage(img, 0, 0, width, height);
    url.revokeObjectURL(src);

}
4

2 回答 2

0

我找到了一个提示(也许不是最好的解决方案)

我添加了第二个画布:

<canvas id="canvas_preview"></canvas>
<canvas id='blank' style='display:none'></canvas>

并检查我的主画布是否看起来像空白的。我在我的“淡入”回调中编写了这段代码:

$("#canvas_preview").delay(2700).fadeIn(
    1500, 
    function(){ 
        if(document.getElementById("canvas_preview").toDataURL() == document.getElementById('blank').toDataURL()) {
            alert("Bad jpg");
        }
    }
);

谢谢大家 !

于 2013-05-03T21:44:33.973 回答
0

编辑:当我回答这个问题时,这个问题是关于服务器端验证的。我的回答是——永远不要相信客户会向您发送正确的数据!您可以验证客户端以获得良好的用户体验,但您也应该验证服务器端。

您可以尝试使用 ImageMagick 的 identify 命令或 Linuxfile命令来查看文件的类型:

对于实际的 JPG:

$ file IMAG0108.jpg
IMAG0108.jpg: JPEG image data, JFIF standard 1.01
$ identify IMAG0108.jpg
IMAG0108.jpg JPEG 480x852 480x852+0+0 8-bit DirectClass 75.4KB 0.000u 0:00.000

对于重命名为 JPG 的 PDF:

$ mv CCF04262013.pdf CCF04262013.jpg
$ file CCF04262013.jpg
CCF04262013.jpg: PDF document, version 1.3
$ identify CCF04262013.jpg
CCF04262013.jpg PDF 595x775 595x775+0+0 16-bit Bilevel DirectClass 58.2KB 0.000u 0:00.000

只需脱壳,运行命令,检查输出,然后就可以了。确保用户不能将任意文件名作为外壳输出的一部分传递(使用临时文件)。

于 2013-05-03T17:11:48.273 回答