Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

239
Visualizações
La carga reanudable falla en segundo plano en Android - React Native

El siguiente código para cargar funciona bien en iOS, pero en Android a veces (no siempre) devuelve el siguiente error debido a un tamaño de fragmento incorrecto.

 Example Error: 400: Invalid request. There were 1527808 byte(s) in the request body. There should have been 3145728 byte(s) (starting at offset 15728640 and ending at offset 18874367) according to the Content-Range header.

al intentar cargar un fragmento y sigue devolviendo el mismo error al volver a intentar cargar el mismo fragmento a menos que se reinicie la carga completa.

El fragmento creado para cargar tiene el tamaño correcto porque los valores en el encabezado Content-Range se toman del propio fragmento. De acuerdo con los encabezados, el tamaño del fragmento era el esperado, pero se están perdiendo datos durante la carga.

Me di cuenta de que esto sucede cuando el dispositivo se bloquea o se pone en segundo plano durante la carga.

Estoy usando RNFS para leer fragmentos del archivo y RNFetchBlob para la solicitud PUT.

 function uploadChunk(offset) { let nextOffset = offset; const thisRecordingInProgress = isInProgress(); // true or false const totalBytes = thisRecordingInProgress ? '*' : size; // size = actual file size // if no offset is specified, fetch it from the server if (nextOffset === undefined) { const res = await RNFetchBlob.fetch('PUT', url, { 'Content-Length': '0', 'Content-Range': `bytes */${totalBytes}`, }); ({ nextOffset } = parseResponse(res)); } // 1. Creating chunk const chunk = await RNFS.read(path, CHUNK_SIZE, nextOffset, 'base64'); const end = nextOffset + Buffer.from(chunk, 'base64').length - 1; // 2. Upload request const resp = await RNFetchBlob.config({ IOSBackgroundTask: true, }) .fetch( 'PUT', URL, { 'Content-Length': `${CHUNK_SIZE}`, 'Content-Range': `bytes ${nextOffset}-${end}/${totalBytes}`, 'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'Chunked', }, chunk ) .uploadProgress(written => { // track upload Progress }); // ({ nextOffset } = await parseResponse(resp));// parses response from server for next offset if (nextOffset < 0) { // Completed } else { // Upload next chunk return uploadChunk(nextOffset); } }

He intentado disminuir el tamaño del fragmento, pero el problema persiste. ¿Hay algo que deba hacer para permitir que esto funcione en segundo plano para Android? O alguna idea de cuál podría ser el problema. Realmente agradecería cualquier ayuda que pueda obtener. Gracias

Actualizaciones:

  1. Intenté eliminar el Rango de contenido ya que es opcional para 'Codificación de transferencia': 'Chunked' pero eso no se solucionó.
  2. Intenté desarmar chunk - chunk = undefined después de que se complete la solicitud de carga para liberar memoria. Problema aún no solucionado.
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda