2016-10-12 43 views
1

我需要在我的AppEngine Web App中包含.well-known/assetlinks.json文件。這裏描述https://developer.android.com/training/app-links/index.html如何在Google AppEngine Web應用程序(Java)上設置/.well-known/assetlinks.json

我加在AppEngine上-web.xml文件中這一行

<static-files> 
    <include path=".well-known/assetlinks.json"/> 
</static-files> 

的問題是,它在本地

它是強制性的,以使應用程序鏈接我的Android應用程序http://localhost:8384/.well-known/assetlinks.json

但不是當我部署web應用程序時,它返回404錯誤

http://www.example.com/.well-known/assetlinks.json

我想這可能是一個安全限制,但我在谷歌雲平臺控制檯到處看,我沒有發現任何東西。

有人可以解決這個問題嗎? 謝謝

+0

這樣看來,它目前還無法使用開始靜態文件夾。在App Engine中。 –

+0

我已經在這裏添加了一個更通用的解決方案來解決這個問題http://stackoverflow.com/a/44023751/654070 –

回答

0

在過去,我遇到過類似的東西,儘管使用python運行庫。

這通常發生在應用程序引擎應用程序的上傳/部署期間,其中正確的MIME類型無法準確猜測。該文件最終被部署爲普通二進制文件application/octect(或根本不?)。您可以確認您的部署日誌是否屬於這種情況。

如果是這樣,你必須在web.xml文件提供了一個jsonMIME type

<mime-mapping> 
    <extension>json</extension> 
    <mime-type>application/json</mime-type> 
</mime-mapping> 
+0

如果我把文件放在沒有起始點的任何其他目錄中,它可以工作... –

+0

對不起,我添加了appengine-web.xml中的靜態文件節點不在Web中。xml,它不起作用 –

+0

問題是起始點 –

1

<static-files><mime-mapping>需要在的AppEngine-web.xml中,不web.xml中去。有關詳細信息,請參閱文檔'appengine-web.xml Reference'。

+0

對不起,我添加了靜態文件節點在appengine-web.xml而不是在web.xml中,它不起作用 –

0

不過,MIME類型關聯會在web.xml中設置,如上述頁面所述,在「靜態文件的MIME類型」段落中提到:「默認情況下,靜態文件使用基於文件擴展名。您可以使用元素將自定義MIME類型與web.xml中靜態文件的文件擴展名關聯起來。「

-1

好的我自己找到了解決方案!

中的AppEngine-web.xml中使用此配置

<servlet> 
    <servlet-name>Assetlinks</servlet-name> 
    <servlet-class>api.servlets.WorkAroundHttpServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Assetlinks</servlet-name> 
    <url-pattern>/.well-known/assetlinks.json</url-pattern> 
</servlet-mapping> 

,並創建一個擴展類WorkAroundHttpServlet的HttpServlet

public class WorkAroundHttpServlet extends HttpServlet 
{ 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 

     if (!req.getRequestURI().startsWith("/.well-known/assetlinks.json")) 
     { 
      resp.sendError(404); 
      return; 
     } 

      File file= new File(getServletContext().getRealPath("/") + "/assetlinks.json"); 

      resp.setContentType("application/json"); 
      resp.getOutputStream().print(FileUtils.readFileToString(file, "utf-8")); 
    } 
} 
相關問題