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

如何从Cordova Android插件返回文件URL

  •  1
  • DroidOS  · 技术社区  · 6 年前

    我有一个混合Cordova Android应用程序,它使用一个自定义插件(即我自己编写的插件)。除此之外,我还使用该插件从外部源获取文件资源。插件中的相关Java代码如下所示

    public static String grabFile(String url,String fName)
    {
     File file = new File(filePath,fName);
     if ((null != file) && file.exists()) return file.toURI().toString();
    
     URL aurl;
     try{aurl = new URL(url);}catch(Exception e){return "";}  
    
     try(InputStream fIn = aurl.openStream();FileOutputStream fOut = new 
      FileOutputStream(file))
     {
      try
      {   
       byte[] buffer = new byte[2048];
       int length;
    
       while ((length = fIn.read(buffer)) != -1) {fOut.write(buffer,0,length);}
       return file.toURI().toString();
      } 
      finally
      {
       fIn.close();
       fOut.close();   
      }
     }   
     catch(Exception e)
     {
      Feedback.postBackInfo(e.getMessage() + "grab file");
      return "";
     }
    }
    

    哪里 filePath , Feedback.postBackInfo etc来自插件代码的其他地方。这通常会返回如下内容

    file:/data/user/0/com.example.myapp/files/filename.png'
    

    然后我在前端(Webview)Javascript中使用它来分配图像源和HTML元素背景

    img.src = file:/data/user/0/com.example.myapp/files/filename.png
    

    element.style.backgroundImage = 'url(' + 
    file:/data/user/0/com.example.myapp/files/filename.png' + ')';
    

    然而,这不起作用。显然,我需要在这里提供的URL的结构不同。它应该如何构建

    1 回复  |  直到 6 年前
        1
  •  1
  •   DroidOS    6 年前

    我曾考虑删除此问题,但为了其他人的利益,我决定将其与代码一起留在这里。简单的答案是 file:/data/user... 需要更改为 file:///data/user... . 我不知道返回的URI为什么有不同的格式。