File Download Service

Abierto
#24 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
rails, ruby
Área
api, backend

Línea de trabajo

Comienza leyendo config/storage.yml y config/environments/production.rb; después, localiza FileDownloader, ChecksumVerifier, el flujo de adjuntos de ActiveStorage y el modelo TopicFile. Se considera terminado cuando las descargas se reanudan desde archivos parciales, los fallos de checksum limpian los archivos y reintentan la descarga, el almacenamiento local está configurado para su uso sin conexión y se han abordado los requisitos de limpieza y copia de seguridad de TopicFile.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

cross-app sync

GET /api/v1/files/{id} with resume support

  • Create FileDownloader service:
class FileDownloader
  def download(file_id, expected_checksum:, resume_from: 0)
    # Downloads to temp file
    # Supports Range header for resume
    # Returns path to downloaded file
  end
end
  • Download to temp directory (tmp/downloads/)
  • Track partial download progress for resume capability
  • Return downloaded file path for attachment

Verify downloaded files match manifest checksums

  • Create ChecksumVerifier service:
class ChecksumVerifier
  def verify!(file_path, expected_sha256)
    actual = Digest::SHA256.file(file_path).hexdigest
    expected = expected_sha256.delete_prefix("sha256:")
    raise ChecksumMismatchError unless actual == expected
  end
end
  • Consider using MD5 since active storage uses MD5 for checksums
  • Integrate verification before ActiveStorage attachment
  • On mismatch: delete file, retry download (up to 3 attempts)

Ensure proper ActiveStorage setup for offline operation

  • Verify config/storage.yml uses local disk:
    local:
    service: Disk
    root: <%= Rails.root.join("storage") %>
  • Set in config/environments/production.rb:
    config.active_storage.service = :local
  • Configure blob cleanup: old blobs purged when TopicFile destroyed
  • Add storage/ to backup strategy
Lenguaje dominante
HTML
Estrellas
4
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de rubyforgood/skillrx-beacon

Todos los issues de rubyforgood/skillrx-beacon

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.