2016-02-29 1 views
1

Я пытаюсь перетащить изображение из Google Chrome или Internet Explorer и зайти в проект Flex, но я не могу получить изображение прямо из папок Temp, как Mozilla Firefox,Как получить изображение, если я перетаскиваю изображение из Google Chrome или Internet Explorer в AS3

Для примера я использую следующие коды идут получить перетаскивания изображения из системной папки темп в случае Mozilla Firefox:

this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onNativeDragDrop); 

private function onNativeDragDrop(vEvent:NativeDragEvent) 
{ 
    var dropFiles:Array = vEvent.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; 

    if(dropFiles && dropFiles.length > 0) 
    { 
     var original:File = File(dropFiles[0]); 
     var nativePath:String = original.nativePath; 
    } 
} 

в nativePath я получаю путь, где изображение изначально хранится как: «C: \ Users \ User_Name \ AppData \ Local \ Temp \ ubeh2wbl.bmp»

Но в случае Google Chrome или Internet Explorer я получаю NULL в nativePath.

Так что я не знаю, где Google Chrome или Internet Explorer сначала хранят изображения.

У кого-нибудь есть идея, где он хранится или как решить эту проблему?

+0

Перетаскивание изображения из браузера не отправляет список файлов, он будет посылать либо растровое изображение, либо текст/url – BadFeelingAboutThis

+0

Да, Chrome сломал это некоторое время назад. Вы использовали изображение, но Chrome что-то изменил (я заметил, что другие приложения не загружают изображение из Chrome путем перетаскивания после этого.) Вместо этого вы можете использовать формат URL, чтобы загрузить его в свое приложение AIR. – Aaron

ответ

4

Я просто попытался это, и когда вы перетащите изображение из Chrome над приложением AIR, он приходит в качестве следующих форматов:

  1. список файлов обещание
  2. URL
  3. текст
  4. html

Список обещаний файлов пуст, поэтому мы сосредоточимся на других.

Вот код, который я использовал, который возвращается через несколько форматов, чтобы попытаться получить перемещенное изображение или изображений пути:

private function onNativeDragDrop(e:NativeDragEvent):void 
    { 
     var img:DisplayObject; //the image (or first image) that was dragged 

     //IF IT'S A BITMAP (The easiest, so check it first) 
     if (e.clipboard.hasFormat(ClipboardFormats.BITMAP_FORMAT)) { 
      var bmd:BitmapData = BitmapData(e.clipboard.getData(ClipboardFormats.BITMAP_FORMAT)); 

      img = new Bitmap(bmd); 
      addChild(img); 
      trace("It's a bitmap"); 
     } 

     //IF IT'S FILE(S) that are dragged, try this next 
     if (!img && e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) { 

      var dropfiles:Array; 
      var file:File; 

      dropfiles = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; 
      for each (file in dropfiles) 
      { 
       //isImagePath is defiend below 
       if (isImagePath(file.nativePath)) { 
        img = loadImage(file.nativePath); //load image function is defined below 
        break; //let's just load the first image 
       } 
      } 

     } 

     //IF IT's A URL that was dragged, try this next 
     if (!img && e.clipboard.hasFormat(ClipboardFormats.URL_FORMAT)) { 
      var url:String = String(e.clipboard.getData(ClipboardFormats.URL_FORMAT)); 
      trace("It's a url: ", url); 
      if (isImagePath(url)) { 
       trace("it's a URL image path"); 
       img = loadImage(url); 
      } 

     } 

     //IF IT's HTML that was dragged, try this next 
     if (!img && e.clipboard.hasFormat(ClipboardFormats.HTML_FORMAT)) { 
      var html:String = String(e.clipboard.getData(ClipboardFormats.HTML_FORMAT)); 
      trace("its HTML: ", html); 

      //use regex to get all the <img> tags from the html 
      var imgs:Array = html.match(/(<img.*?>)/g); 

      //if one or more was found 
      if (imgs.length) { 
       trace("Image tag(s) found"); 
       var imgPath:String; 
       for (var i:int = 0; i < imgs.length; i++) { 
        //use regex to get the src value from the img tag 
        imgPath = imgs[i].match(/src="(.*?)"/)[1]; 
        img = loadImage(imgPath); 
        break; //let's just load the first image 
       } 
      } 
     } 

     //IF IT's raw text that dragged, try this next 
     if (!img && e.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) { 
      var txt:String = String(e.clipboard.getData(ClipboardFormats.TEXT_FORMAT)); 
      trace("its text: ", txt); 

      if (isImagePath(txt)) { 
       img = loadImage(txt); 
      } 
     } 

    } 

    private var imgTypes:Vector.<String> = new <String> ["jpg", "gif", "png"]; 
    private function isImagePath(path:String):Boolean { 
     if (path.lastIndexOf(".") > -1) { 
      var ext:String = path.substr(path.lastIndexOf(".")).toLowerCase(); 
      return new RegExp(imgTypes.join("|")).test(ext); 
     } 

     return false; 
    } 

    private function loadImage(path):Loader { 
     var l:Loader = new Loader(); 
     l.load(new URLRequest(path)); 
     addChild(l); 
     return l; 
    } 
+0

Спасибо «BadFeelingAboutThis» за ваш ценный ответ – Ashish

+0

Мой вопрос приведен по следующей ссылке: http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_image_link В приведенной выше ссылке, когда я перетаскиваю смайлик из Mozilla Firefox работает нормально (т. Е. Я получаю такой путь, как «C: \ Users \ User_Name \ AppData \ Local \ Temp \ ubeh2wbl.bmp» в переменной nativePath), но в Chrome, когда я перетаскиваю его в проект, я получаю NULL в переменной nativePath и в url я получаю только http://www.w3schools.com/. Так вы можете сказать мне, почему это происходит именно так. – Ashish

+0

Я не могу сказать вам, почему (разработчикам Chrome пришлось бы это сделать), но, скорее всего, это дает вам привязку href, поскольку изображение завернуто в якорь, и это будет иметь смысл для свойства URL. В вашем конкретном примере я заметил, что 'HTML_FORMAT' дает вам весь узел html узла , который можно использовать для анализа значения src. Было бы неплохо провести эксперимент, чтобы понять, насколько он последователен. Я обновлю свой ответ, чтобы угадать, как он может работать. – BadFeelingAboutThis

Смежные вопросы