代码之家  ›  专栏  ›  技术社区  ›  Bemmu

将图像缩略图上载到服务器,而不上载整个图像

  •  4
  • Bemmu  · 技术社区  · 15 年前

    据我所知,我在这里问的是不可能的,但我想无论如何我都会问,以防我错过什么。

    假设您想让用户上传JPG图像,这些图像被缩放成更小的图标,原始图像总是被丢弃,不再需要。在大多数现代浏览器中,是否有任何方法可以让用户在硬盘上选择一个图像,将其本地转换为缩略图并将创建的缩略图上载到服务器?

    如果服务器只需要一个小的映像,那么继续上载整个映像会浪费用户时间和服务器资源,只会立即丢弃它。只在客户机上进行扩展会更好。

    我可以想象三种选择。简单的HTML/JavaScript,使用Flash或使用Java。如果Flash能做到这一点,那似乎是最好的选择。但在阅读flash.net.filereference文档时,您似乎可以从hd上传文件是的,但是您不能查看正在上传的文件。另一方面,如果您在Flash发布选项中启用“可以访问本地文件”,那么您似乎就无法再访问网络,因此这不起作用。

    使用HTML/javascript,可以加载图像并将其显示在 <canvas> 但是,如果你试图访问这些图像的像素,你会受到安全侵犯,所以这似乎不起作用。

    JAVA我不愿意使用,因为只有96.52%的用户安装了它,而我在Java中实现的文件上传对话框(例如脸谱网)没有工作(没有响应的接口)。我想知道如果Java是唯一允许从本地HD调整图像大小的东西吗?

    5 回复  |  直到 14 年前
        1
  •  2
  •   Rex M    15 年前

    我认为,如果有一个相当可靠和用户友好的方式来实现这一点,它应该已经在Facebook这样的网站上实现了。人们习惯于上传原始图像…能够改进一个已经建立的用户体验总是很好的,但是如果你只能匹配它,你就不会完全失败。

    因为JS不能直接从客户机读取任何内容,所以JavaScript已经退出;它只能引导浏览器加载预先定义的本地路径,或者从服务器加载字节。

    正如您指出的,Flash的安全沙盒也可以防止这种情况。

    Java有一个不同的问题-人们很少安装applet这些天除非他们相信网站比他们自己的家庭成员。建造可靠的东西显然也非常困难 可用性,如Facebook式的公司所证明的,这些公司几乎拥有无限的资源来解决问题,但仍然失败。

    所以,总的来说-不,别担心太多。

        2
  •  4
  •   Lars Blåsjö    15 年前

    “如果用闪光灯可以做到的话, 似乎是最好的选择。”

    据我所知,使用Flash播放器10是可能的。

    下面是一个例子:

    http://blog.kukiel.net/2009/02/file-manipulation-client-side-with.html

    Flash Player 10目前的市场普及率约为85-90%,因此如果您不愿意使用Java,因为您的用户只有96.52%安装了它,我猜您也不希望使用Flash播放器10。

        3
  •  0
  •   Peter Shinners    15 年前

    如果jpeg图像是渐进式的,则可以在获得一定的分辨率后停止上载。这需要您自己处理一点jpeg加载程序和HTTP处理代码。

    这也是一个相当大的“if”,因为大多数jpeg在默认情况下都不是渐进的。

        4
  •  0
  •   Mikhail Korobov    15 年前

    另一种方法是使用谷歌的齿轮,例如: Gears Uploader .

        5
  •  0
  •   M.Torres    14 年前

    我觉得你可以把图片上传到服务器上,然后在浏览器中显示出来,然后用户会用javascript来调整它的大小,但不是真正的调整大小,只捕获它的坐标,然后你可以用坐标来调整服务器上的图片的大小,保存新的图片(拇指)并放弃原来的图片。