Come the docs dicono:
Conservare un file nella modalità di trasferimento binario. cmd dovrebbe essere un comando appropriato STOR
: "STOR filename"
. file di è un oggetto file (aperto in modalità binaria) che viene letto fino EOF usando il proprio metodo read()
in blocchi di dimensioni blocksize di fornire i dati da memorizzare ...
Quindi, è necessario dare un oggetto simile a un file con un metodo appropriato read
.
Una stringa non è un oggetto simile a un file, ma uno è io.BytesIO
. Quindi:
import io
bio = io.BytesIO(b'text to store')
ftp.storbinary('STOR myfile.html', bio)
Inoltre, si noti che non ho passare che 'rb'
argomento. Il terzo parametro a storbinary
è blocksize e 'rb'
non è ovviamente una dimensione di blocco valida.
Se è necessario lavorare con Python 2.5 o versioni precedenti, vedere la risposta di Dan Lenski.
E se avete bisogno di lavorare con Python 2.6-2.7, e le prestazioni dell'oggetto simile a file è importante (non è qui, ma ci sono alcuni casi in cui potrebbe essere), e vi interessa solo CPython , usa la sua risposta ma con cStringIO
al posto di StringIO
. (Semplice StringIO
è lento in 2.x, e io.BytesIO
è ancora più lento prima di circa 3.3.)
Ha funzionato per me ma ho dovuto codificare la stringa come BytesIO requiresa oggetto simile a un byte. Quindi: 'bio = io.BytesIO ('text to store'.encode (' utf-8 '))' – iomihai
@iomihai Bene, in questo caso, potresti semplicemente usare un byte letterale, invece di usare str letteral e encoding esso. Ma sì, modificherò la risposta. – abarnert