Ho una stringa base64 che ho decodificato e desidera consentire all'utente di salvarlo come un file. In particolare, quando controllo la lunghezza di decodedContent, sono 11271 byte.javascript: dimensione del file scaricato diversa dalla lunghezza del contenuto
var content = messageObj['data'];
var decodedContent = atob(content);
console.log(decodedContent.length);
Poi ho usato
var blob = new Blob([decodedContent], {type: 'application/octet-stream'});
window.open((window.URL || window.webkitURL).createObjectURL(blob));
Per richiedere all'utente di salvare decodedContent
. Quando controllo le dimensioni del file salvate, dice 16892 byte, che è diverso da quanto affermato sopra. Qualche idea del perché?
Il contenuto è un file tar-ball codificato in base64 inviato dal server.
for i ,l in enumerate(to_download):
if i == 1:
break
last_index = l.rfind('|')
download_path = l[last_index+1:].strip()
mda_url = '%s/%s'%(root_url, download_path)
logger.debug('Downloading file %s/%s at %s', i, len(to_download), mda_url)
mda_req = urllib2.Request(mda_url)
mda_response = urllib2.urlopen(mda_req)
f = StringIO.StringIO(mda_response.read())
replace_path = mda_url.replace('/', '_')
ti = TarInfo("%s.txt" %replace_path)
ti.size = f.len
tar.addfile(ti, f)
tar.close()
tar_file.close()
with open("/Users/carrier24sg/Desktop/my.tar", 'rb') as f:
tar_str = f.read()
logger.info("Completed downloading all the requested files..")
return tar_str
UPDATE:
ristretto al problema essere sia con var decodedContent = atob(content)
; oppure var blob = new Blob([decodedContent], {type: 'application/octet-stream'});
Finalmente sono riuscito a utilizzare la risposta di @Jeremy Bank here. La sua prima risposta risolve il problema della lunghezza del contenuto che è diversa, ma quando controllo il checksum, il contenuto non sembra corrispondere. Ho solo risolto la funzione della seconda risposta b64toBlob. Tuttavia, non sono ancora sicuro di cosa c'è che non va, quindi spero che qualcuno possa far luce su questo.
Cosa mostra "blob.size'? – raina77ow
blob.size dice 16892 – goh
Ok, puoi dare un esempio di cosa c'è in 'decodedContent'? Una spiegazione è che 'atob' restituisce una stringa che contiene caratteri multibyte. Ad esempio, 'var p = atob ('ddd'); var b = new Blob ([p], {type: 'application/octet-stream'}); console.log (B.Size);/* 3 */console.log (p.length);/* 2 */' – raina77ow