Gå til innhold

Sende form via HTTP POST til ein ekstern app.


Anbefalte innlegg

Heisann!

 

Eg held på med eit oppdrag kor brukarar kan laste opp videoar til ein nettstad. Sidan transkoding og lagring av video tek ganske mykje plass, blir dette gjort av ein ekstern mediatranscoder. Denne transcoderen er brukt av eit titals tenester hos arbeidsgiveren min, så eg må sende ved eit par stikkord for å definere avsendar (altså den aktuelle tenesta under utbygging).

 

Av metadata skal dette sendast med filmfila:

  • eit nøkkelord
  • brukar-id (for å gjenkjenne opplastaren)
  • tittel
  • tags
  • beskrivelse

...i tillegg kjem såklart filmfila.

 

Arbeidsflyten til applikasjonen ser slik ut:

  • Brukaren fyller ut skjemaet
  • Skjemaet blir sendt til vår server over HTTP POST med multipart/form-data
  • Filmfila blir midlertidig lagra på serveren - og både den og all anna input sjekka for feil
  • Brukaren som fylte ut skjemaet blir identifisert
  • Filmen og resten av metadataene blir sendt via HTTP POST med multipart/form-data til den eksterne API-en

Eg får til alt bortsett frå det siste punktet -- den resulterer alltid i "broken pipe"-feilmeldinga. Eg tippar at dette kjem av at filmen ikkje blir bitstreamet over forbindelsen.

Det eg då lurer på: Korleis skal eg berre lese delar av fila inn i minnet og sende dette over forbindelsen, i staden for å dumpe heile fila inn i minnet?

 

Eg har funne eit par halvløysingar på problemet, blant anna ein kodesnutt på ASPN, men dei lastar heile fila inn i minnet.

 

Eg har ein ganske kort deadline på denne funksjonaliteten, så om dei av dykk med innsikt i dette kunne supplementert svaret dykkar med litt eksempelkode hadde eg vore evig takknemleg. :)

 

Mitt første instinkt er at eg bør gå ned på socket-nivået og programmere dette direkte, men er dette for tungvindt? Eg veit ikkje - akkurat dette er heilt nytt for meg.

 

 

På førehand,

Takk for alle svar!

Lenke til kommentar
Videoannonse
Annonse

Hei,

 

Fila må sendast over HTTP POST med MIME multipart/form-data. Metadataene er ikkje ei spesifikk fil, men heller parameter i transaksjonen.

 

Det er fullt mogleg å sende ei fil over nettverket utan å laste alt inn i minnet. Det går ut på at du hentar x antall byte per. "tur" gjennom tilkoblinga og dumpar dei som er lest.

 

hotstian: Eg har ikkje tilgang til tenesta som skal motta fila, nei. Det einaste eg har er ein kryptert nøkkel og ein URL. :)

Endret av Henrik Lied
Lenke til kommentar
Hei,

 

Fila må sendast over HTTP POST med MIME multipart/form-data. Metadataene er ikkje ei spesifikk fil, men heller parameter i transaksjonen.

 

Det er fullt mogleg å sende ei fil over nettverket utan å laste alt inn i minnet. Det går ut på at du hentar x antall byte per. "tur" gjennom tilkoblinga og dumpar dei som er lest.

 

hotstian: Eg har ikkje tilgang til tenesta som skal motta fila, nei. Det einaste eg har er ein kryptert nøkkel og ein URL. :)

9585117[/snapback]

Nei, men når du skal lese de 10 siste bytene fra filen for å sende dem, så har du vel stort sett hele filen i minne med mindre du driver med swapping?

 

Uansett, Chunked Transfer Encoding burde vel kunne brukes? (uten at jeg har testet dette selv)

Lenke til kommentar

chunked er heilt sikkert noko eg bør sjå på ja. Ikkje dumt tenkt! :)

 

Eg har forresten fått til ei løysing som fungerar halvveis no. Fortsatt litt overhead, men i grove trekk brukar eg ein modul funne i django.core.servers.basehttp til å sende bruddstykker av fila gjennom forbindelsen, der forbindelsen er skrevet direkte på socket. :)

 

Skulle gjerne delt koden med dykk, men eg må evt. høre med sjefane om det er greitt først.

Endret av Henrik Lied
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...