React Native S3 Загрузка по заранее заданному URL-адресу ~ изображение сохраняется как объект json вместо изображения - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над сценарием для загрузки изображения на S3 в реагировать родной, реагировать-родной-imagepicker и топор ios ...

Для начала у меня есть селектор файлов:

 function onChoosePhoto() {
    const options = {
      noData: true,
    }
    ImagePicker.launchImageLibrary(options, response => {
      if (!response.didCancel && !response.error) setFile(response)
    })
  }

затем, после того, как файл задан, я отправляю его в свой сервис:

useEffect(() => {
  const isValidSize = file && file.fileSize > 6 * 1024;
  const isValidType = file && allowedTypes.includes(file.type);
  if (isValidSize && isValidType) {
    setErrors([]);
    uploadFile(file);
  } else {
    if (file && !isValidSize) setErrors([...errors, 'file exceeds maximum allowed size']);
    if (file && !isValidType) setErrors([...errors, 'unsupported file type, please use a jpg file extension']);
  }
}, [file]);

, а затем мой сервис получает заданный URL-адрес и отправляет файл ...

export async function receiptUpload(file) {
  const date = new Date();
  const headers = await getAWSHeaders();

  const presignUrl = await request.post(
      urls.fileUpload.presignUpload,
      {file_name: date.getTime()},
      {headers}
    )
    .then(res => res.data);

  const fileUpload = presignUrl.presignUrl && await request.put(
      presignUrl.presignUrl,
      {...file, fileName: date.getTime()}
    )
    .then(res => res.status === 200);

  // const fileId = fileUpload && await request.post(urls.fileUpload.receiptUpload, {file_name: file.name}, {headers}).then(res => res.data);
  // const receiptSubmit = fileId && await request.post(urls.fileUpload.receiptSubmit, {
  //   file_id: fileId.file_id
  // }, {headers}).then(res => res.data);
  return receiptSubmit;
}

Кажется, это работает нормально, и я получаю ответ 200 от S3. Однако, когда я смотрю в корзину, он сохраняется как файл без расширения файла, а при открытии файла он просто содержит JSON, который соответствует тому, что задано response-native-imagepicker, например:

{
  height: 3024
  origURL: "assets-library://asset/asset.HEIC?id=CC95F08C-88C3-4012-9D6D-64A413D254B3&ext=HEIC"
  fileName: null
  width: 4032
  type: "image/jpeg"
  fileSize: 13712705
  isVertical: false
  uri: "file:///Users/sandra.willford/Library/Developer/...
}
...