2016-11-08 5 views
2

이미지,유성 안드로이드 응용 프로그램 내 몽고 데이터베이스에 이미지를 저장하기 위해 나는 우수한 파일 수집 패키지를 사용하고

https://atmospherejs.com/vsivsi/file-collection

표시되지. Android에서 앱을 실행해도 이미지가 표시되지 않습니다 (이미지가 깨진 이미지로 표시됨). 브라우저에서 완벽합니다.

이미지가 저장되는 Mongo의 gridfs를 사용하고 있기 때문에 문제가이 패키지에 고유하지 않다고 생각합니다. 그리고 URL에 액세스 할 수 있습니다.

여기 문서에 본과에서 주 : 유성 1.2+

코르도바 안드로이드의 버그로 인해 유성 1.2 사용되는 코르도바 안드로이드 버전의 버그로, mobile-config.js에 다음을 추가해야합니다. 그렇지 않으면 Android 장치에서이 패키지에 문제가 있습니다.

App.accessRule ("blob : *");

나는 성공했지만 성공하지 못했습니다.

는 또한 문서 참조는 다음과 같이, CORS 문제를 처리하기 위해 헤더를 설정 참조 :

myFiles = new FileCollection('myFiles', 
    { resumable: true, // Enable built-in resumable.js chunked upload support 
    http: [    // Define HTTP route 
     { method: 'get', // Enable a GET endpoint 
     path: '/:md5', // this will be at route "/gridfs/myFiles/:md5" 
     lookup: function (params, query) { // uses express style url params 
      return { md5: params.md5 };  // a query mapping url to myFiles 
     }, 
     handler: function (req, res, next) { 
      if (req.headers && req.headers.origin) { 
      res.setHeader('Access-Control-Allow-Origin', 'http://meteor.local'); // For Cordova 
      res.setHeader('Access-Control-Allow-Credentials', true); 
      } 
      next(); 
     } 
     }, 

그러나 다시 성공하지.

관리자의 네트워크 탭을 보면 서버의 이미지에 대한 요청을 볼 수 없기 때문에 코도 바 코드에서 무언가에 의해 거부되고 있음을 알 수 있습니다. 이미지를 얻으십시오.

본인의 데모 앱을 사용하여 문제를 재현했습니다.이 데모 앱은 안드로이드 플랫폼을 포크하고 추가 했으므로 시도하고 도움을 청하면 준비가되었습니다.

https://github.com/mikkelking/meteor-file-sample-app

당신이 안드로이드에서 실행해야 유성 실행 안드로이드 장치를 할 경우. 문제를 보려면 이미지를 등록한 다음 업로드해야합니다. 브라우저에서 잘 작동합니다.

도움이 될만한 점이 있으면 내 프로젝트의 쇼 스토퍼입니다. 내가 고려한 한 가지 옵션은 S3 버킷으로 이미지를 옮기는 것입니다. 나는 그렇게 할 수 있다고 생각합니다.하지만 가능한 경우 이미지를 DB에 보관하고 싶습니다.

답변

1

gridfs에서 비슷한 문제가 발생했습니다. 이미지 소스가 상대 소스이기 때문에 문제가 발생한다고 생각합니다. 그래서 당신의 이미지 소스는 localhost에서옵니다. 브라우저가 서버와 동일한 시스템에 있기 때문에 웹 버전에서 작동하므로 localhost 소스가 정상적으로 작동합니다. 그러나 안드로이드 장치에서는 이미지가 해당 장치에서 제공되지 않기 때문에 작동하지 않습니다.

제가이 프로덕션 환경에 배포했을 때 모바일 장치에서 작동했습니다. 이미지 원본이 인터넷에 있고 해당 장치와 관련이없는 URL을 가리 키기 때문입니다. 이것은 프로덕션 환경에서 작동하지만 dev 테스트에서는 작동하지 않습니다.

이 질문을 보았을 때 코드를 복제하여 로컬 개발자 용 안드로이드 장치에서 작동하게했습니다.

내가 수행 한 첫 번째 단계는 ROOT_URL env 변수와 모바일 서버가 로컬 서버를 가리 키도록 설정하는 것입니다. 당신이 유성을 실행하면 로컬 당신은 당신의 컴퓨터의 로컬 IP 주소

export ROOT_URL=http://192.168.1.255:3000 && meteor run android-device --mobile-server=http://192.168.1.255:3000를 사용하여 이러한 변수를 설정하려면이 같은 명령을 실행할 수 있습니다

다음으로, 당신의 sample.coffee Template.collTest.helpers 링크 기능, 당신은 절대 URL을 사용해야합니다 상대방 대신에 (그래서 귀하의 모바일 장치에 로컬 호스트 대신 로컬 서버를 찾습니다). 동적으로 다른 서버에 작동하도록이를 얻으려면, 당신은 내가 sample.jade 파일의 내용 보안 정책에 컴퓨터의 IP 주소 http://192.168.1.255:3000를 추가했다 그런 다음이

Meteor.absoluteUrl(myData.baseURL + "/md5/" + this.md5)

같은 것을 사용할 수 있습니다.

저는 거의 잊어 버렸습니다.이 시점에서 403 금지 된 오류가 발생했습니다. sample.coffee에서 myData.allow 읽기 함수를 변경하고 true를 반환했고 403이 사라졌습니다. 거기에 사용 권한이 있습니다.

그 후 이미지가 내 안드로이드 장치에 나타났습니다.

+0

도움을 주셔서 대단히 감사합니다. 이것은 나를 죽이고 있습니다. 지금 당장 시도해 보겠습니다! – Mikkel

+0

당신이 승자가되었습니다! 고마워할만한 것을 보낼 수 있을까요? – Mikkel