2017-11-02 7 views
0

우리는 React Native와 react-native-image-picker 라이브러리를 사용하여 앱을 제작하고 있습니다.React Native 업로드 된 이미지를 표시하는 기이 한 안드로이드 동작

이미지 갤러리 (이미지 파일)에서 선택한 이미지 (프로필 이미지)를 업로드 할 때 오류가 전혀 발생하지 않습니다. 요청한 후 프로필 페이지로 돌아 가면 방금 업로드 한 이미지가로드되지 않습니다. 캐시 다시 시작/빌드/지우기는 문제를 해결하기 위해 아무 것도하지 않습니다.

동일한 계정에서 내 IOS 시뮬레이터/Android 에뮬레이터를 볼 때 기기에서 업로드 된 이미지가 표시됩니다.

tl : dr 안드로이드 장치에서 이미지를 업로드합니다 (올바르게 업로드하면 브라우저에서 볼 수 있습니다). 같은 장치에서 볼 수는 없지만 다른 장치/시뮬레이터에서 볼 수 있습니다.

나는 무슨 일이 일어나고 있는지 전혀 모른다. 문제가 릴리스를 지연시키는 것처럼 빠른 대답을 좋아할 것이다.

여기 이미지 선택기에서 이미지를 가져옵니다.

ImagePicker.showImagePicker(options, (response) => { 
    if (response.error) { 
    this.props.setError(I18n.t('editProfile.fields.profileImage.error')); 
    } else if (!response.didCancel) { 
    if (Platform.OS === 'ios') { 
     const image = { 
     uri: response.uri.replace('file://', ''), 
     filename: 'ProfileImage', 
     height: response.height, 
     isStored: false, 
     width: response.width, 
     }; 

     this.props.onSubmit(image); 
    } else { 
     const image = { 
     uri: response.path, 
     filename: 'ProfileImage', 
     height: response.height, 
     isStored: true, 
     width: response.width, 
     }; 

     this.props.onSubmit(image); 
    } 
    } 
}); 

참고 :이 기능은 iOS에서 완벽하게 작동합니다.

+0

제출 한 이미지를 표시하기 위해 사용하는 URI는 무엇입니까? –

+0

나는 amazone s3 url을 사용하고 있습니다. –

+0

제출 버튼은 업로드 기능입니다 –

답변

0

문제가 업로드 된 어떤 이미지를 기반으로 발생했다. 오래된 Android 기기에 문제가있는 것 같습니다.

0

필자도 AWS S3과 비슷한 문제가 있었지만 제 경우에는 content-type/mime type이 설정되지 않은 것이 문제였습니다. 수동으로 설정해야했습니다.

이 내 코드의 일부입니다

s3 = new AWS.S3(); 

     var extension = ".jpg"; 
     if (img.mime.indexOf(".png") > -1) 
     extension = ".png"; 

     var key = "Reports/" + req.body.id + "/" + date.getTime() + "/Image" + extension; 

     var buf = new Buffer(img.data,'base64'); 

     var params = { 
     Bucket: 'XXXXXXXXXXXXX', 
     Key: key, 
     Body: buf, 
     ContentEncoding: 'base64', 
     ContentType: img.mime, 
     ACL: 'public-read' 
     }; 

     console.log("S3 Start"); 
     var upload = s3.upload(params, function(err,data) { 
     if (err) { 
      console.log(err, err.stack); 
     } else { 
      console.log(data); 
      s3Url = data.Location; 
     } 
+0

다른 기기에는 나타나지 않습니까? –

+0

내게 일어난 일은 이미지가 옥텟트 바이너리로 감지 되었기 때문에 다운로드되는 대신에 다운로드되는 것임을 기억합니다. 그러나 일부 브라우저는 실제로 이미지를 보여주었습니다. 나는 당신이 당신이 S3를 사용하고 있다고 말했기 때문에 이것을 언급합니다. 이미지가 실제로 올바르게 업로드 되었습니까? – sfratini

+0

예, 이미지가 올바르게 업로드되었습니다. 다른 장치 및 시뮬레이터에 표시됩니다. –