Išsaugokite dvejetainio failo baitus įkeldami per tarpinį serverį
Išsaugokite failo baitus ir baitų ilgius įkeldami per tarpinį serverį, o ne iššifruokite failą kaip tekstą ir atkurkite jį ASCII kodu.
Dvejetainis failas turėtų pasiekti HTTP klientą kaip baitai. Skaitymas tekstiniu skaitytuvu ir gautos eilutės pakartotinis kodavimas ASCII gali pakeisti reikšmes dar prieš tarpiniam serveriui ką nors gaunant. Tai, kad veikia mažas teksto pavyzdys, nepadaro šio kelio saugiu vaizdui, archyvui ar dokumentui.
Esamame .NET įkėlimo kelyje pakeiskite tą konvertavimą dvejetainiu turinio šaltiniu:
using var file = File.OpenRead(path);
using var content = new StreamContent(file);
Perduokite turinį per programos sukonfigūruotą HTTP įkėlimą; fragmentas nustato kūno šaltinį, o esamas klientas vis dar valdo metodą, paskirties vietą, tarpinį serverį ir gyvavimo tvarkymą.
Pašalinkite bet kokį Content-Length, apskaičiuotą pagal senos eilutės simbolių skaičių. Šis laukas matuoja oktetais. Leiskite HTTP bibliotekai sudaryti rėminimą iš kūno atvaizdavimo, o ne poruoti simbolių skaičių su kitaip užkoduotu buferiu.
Jei tekstas įkeliamas tyčia, pasirinkite kodavimą aiškiai ir bet kokį reikiamą ilgį apskaičiuokite iš siunčiamų baitų. Tas teksto formato sprendimas neturėtų būti taikomas savavališkiems failams.
Palyginkite perduotą failą su patikima tikėtina verte. HTTP sėkmė patvirtina, kad įkėlimo operacija tame sluoksnyje baigta; ji negali parodyti, kad ankstesnis teksto konvertavimas išsaugojo pirminius baitus.