当我通过expo react native将图像上传到Firebase时,它没有显示图像;显示错误加载预览

时间:2018-12-12 06:07:46

标签: firebase react-native expo

我正在使用expo在firebase中上传不带base 64的图像。该文件已上传,但我无法查看图像-“ <script src="https://www.amcharts.com/lib/4/core.js"></script> <script src="https://www.amcharts.com/lib/4/charts.js"></script> <script src="https://www.amcharts.com/lib/4/themes/animated.js"></script> <div id="chartdiv"></div>”。当我尝试通过url下载图像时,它显示出损坏或损坏的图像。 我的firebase上传代码是:

// error handling omitted for brevity; see GetLastError
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
if( hOut == INVALID_HANDLE_VALUE ) { return; }

DWORD dwMode = 0;
if( !GetConsoleMode( hOut, &dwMode ) ) { return; }
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
if( !SetConsoleMode( hOut, dwMode ) ) { return; }

std::cout << "\x1b[91mRed\n"
          << "\x1b[92mGreen\n"
          << "\x1b[94mBlue\n"
          << "\x1b[38;5;221mArbitrary RGB color\n"
          << "\x1b[0mReset colors\n";

博览会图片选择器代码为:

// error handling omitted for brevity; see GetLastError
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
if( hOut == INVALID_HANDLE_VALUE ) { return; }

// save current buffer information
CONSOLE_SCREEN_BUFFER_INFO sbInfo{ sizeof CONSOLE_SCREEN_BUFFER_INFO };
GetConsoleScreenBufferInfo( hOut, &sbInfo );

SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
std::cout << "Red\n";

SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY );
std::cout << "Green\n";

SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
std::cout << "Blue\n";

SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
std::cout << "Light Gray\n";

SetConsoleTextAttribute( hOut, sbInfo.wAttributes );
std::cout << "Reset colors\n";

请帮助!

1 个答案:

答案 0 :(得分:1)

我以前有同样的问题。我发现这是因为launchImageLibraryAsync设置和blob格式不是图像。您可以尝试使用base64。

首先,将launchImageLibraryAsync选项设置为同伴:

const result = await ImagePicker.launchCameraAsync({
  allowsEditing: true,
  base64: true,
  aspect: [4, 3]
})

第二,将base64上载到firebase:

export const uploadAsFile = (base64, folder: string) => {
  var metadata = {
    contentType: 'image/jpeg'
  }

  let name = new Date().getTime() + '-media.jpg'
  const ref = firebase
              .storage()
              .ref()
              .child(folder + '/' + name)

  const task = ref.putString(base64, 'base64', metadata)

  return new Promise((resolve, reject) => {
      task.on(
        'state_changed',
        snapshot => {},
        error =>
        reject(error) /* this is where you would put an error callback! */,
        () => {
           const downloadURL = task.snapshot
           console.log('downloadURL:', downloadURL, name)
           resolve(name)
               }
     )})
}