正在上传照片

时间:2011-05-16 05:37:36

标签: javascript security file-upload

我的问题是将照片上传到网络服务器。

我最近观察到在Facebook上传照片时可以上传(默认情况下)上传的照片比我们要求的要少。

现在,我可以考虑上传全尺寸照片并在到达服务器时进行压缩。

但是,facebook如何在上传时调整图片大小 Is there any request header (I think there is not) that asks browser to upload specific size image and manipulate the exif/jpeg data in the file.

如果没有,某些插件/ Flash / Javascript必须从我们的系统中读取文件/图像。 Does web standard really allow file reading from the user system?

请告知。

的问候,
Mayank

2 个答案:

答案 0 :(得分:2)

在将图片上传并保存到目标目录之前,网站/网络服务器无法对图像执行任何操作。它必须接收全尺寸图像,然后将其重新设置为所需的大小[生成缩略图等]。您没有描述过请求标题。

Web标准不允许从用户硬盘读取文件。他们允许的是从硬盘中选择文件,然后发送到服务器 - 主动是在客户端,而不是服务器。

还有什么你想知道的吗?

<强>更新

请参阅:Flash upload image resize client side

正如我所说 - 没有外部机制,我们无能为力。但当然,如果我们考虑Flash,Google Gears等等,一切皆有可能。

答案 1 :(得分:1)

现在可以使用HTML5

目前并非所有浏览器都能容纳它,但HTML5中的某些功能会在图像通过网络发送之前调整图像大小。

Look at hacks.mozilla.org... for more details

摘自以上链接:

  

调整图像大小

     

人们习惯上传图片   直接从他们的相机。这给了   高分辨率和极重   (几兆字节)文件。取决于   用法,您可能想要调整大小   图片。一个超级简单的技巧是   只需要一个小帆布(800×600   例如)并绘制图像标签   进入这个画布。当然,你会的   必须更新画布尺寸   保持图像的比例。

var MAX_WIDTH = 800;
var MAX_HEIGHT = 600;
var width = img.width;
var height = img.height;

if (width > height) {
  if (width > MAX_WIDTH) {
    height *= MAX_WIDTH / width;
    width = MAX_WIDTH;
  }
} else {
  if (height > MAX_HEIGHT) {
    width *= MAX_HEIGHT / height;
    height = MAX_HEIGHT;
  }
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height)