2010-07-11 55 views
3

我想让用户上传图片到服务器添加一些关于每个图片的信息(如描述,标签)。
我使用Uploadify来上传多张图片。可以显示图像缩略图而不上传到服务器吗?

我不知道是否有可能显示图像的缩略图(而用户输入关于每个图像的附加信息)之前图像实际上传到服务器。

我希望用户有以下几点体会:

  • 选择多个图像文件
  • 紧接着输入每个图像更多的信息,而看到图像的缩略图
  • Upload Files按钮上传图片到服务器,并去喝咖啡...

我发现this script,但我认为它也上传之前的文件显示图像缩略图。

我将不胜感激任何帮助!

+1

重复:http:// stackoverflow。COM /问题/ 771581/IS-有-任何路至显示器的图像,在客户端的浏览器,而无需上载,其对服务 – galambalazs 2010-07-11 13:08:50

回答

3

当然这是可能的。使用FileReader对象获取数据URL(如果确定客户端实现了该URL,则使用File.url),并将其分配给new Image()对象。然后你可以插入图像到DOM。

0

我很确定flash和java都可以。 Flash需要某些(明显的)安全防范措施(即,您可以为任何文件执行此操作,但必须由用户选择)。 同时java会显示一个安全弹出框。

1

作为基于标准的HTML5 API的替代方案,您可以使用插件,如Flash或Browserplus

实际上有一个现成的应用程序,它可能正是你想要的。它叫做Plupload。您可以使用各种“运行时”上传文件/图像,并在上传前进行客户端图像大小调整。我想你可以在某些运行时间的某个地方挂钩缩略图预览。

否则,您可以尝试使用HTML5/Gears/BrowserPlus/etc. API从头创建您想要的内容。

0

Xavieranother thread上发布了这个解决方案,并且我试图将它改进以适应多个文件输入。我希望它有帮助。

$("body").on('change', 'input:file', function(e){ 
for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) { 

     var file = e.originalEvent.srcElement.files[i]; 

     var img = document.createElement("img"); 
     var reader = new FileReader(); 
     reader.onloadend = function() { 
      img.src = reader.result; 
     } 
     img.width = "50"; 
     reader.readAsDataURL(file); 
     if($(this).next().hasClass('image_place')){ 
      $(this).next('.image_place').html('').append(img); 
     }else { 
      $(this).after('<div class="image_place"></div>'); 
      $(this).next('.image_place').append(img); 
     } 
    } 
}); 

它扫描文档正文中的所有文件输入并使用FileReader API读取图像。如果它找到任何图像,它将创建一个名为“image_place”的div,在其中放置图像。如果里面已经有图像,脚本会替换图像。