Ahoj Jirko,<br><br>pokud vim, tak Django resi pouze prijem souboru, ale nikde nevystupuje jako sitovy klient. Koukal jsem do django/core/files a nechal prohledat zdrojaky na PUT / POST a zadny relevantni kod jsem bohuzel opravdu nenasel.<br>

<br>Kazdopadne jsem nasel jeden storage backend pro Django, ktery resi ten samy problem a nasel jsem modul &quot;Poster&quot; (<a href="http://pypi.python.org/pypi/poster/0.6.0">http://pypi.python.org/pypi/poster/0.6.0</a>). Takze jeste jsem to nezkousel, ale problem je zrejme vyresen. Jenom jsem rozcarovan, ze http streaming neresi pythoni standardni knihovna (co vim, tak ani nove moduly pro Python3) a ze budu nutit uzivatele instalovat dalsi externi balik. Pravdepodobne zkombinuju mmap a poster (&quot;chcete podporu extra velkych souboru? Doinstalujte si Poster&quot;).<br>

<br>Marek<br><br><div class="gmail_quote">2010/9/28 Jirka Vejrazka <span dir="ltr">&lt;<a href="mailto:jirka.vejrazka@gmail.com">jirka.vejrazka@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Ahoj,<br>
<br>
  Ja ted nejsem u pocitace, ale podival bych se jak to resi Django a<br>
podobne. Jelikoz je pod BSD licenci, tak neni problem to reseni<br>
okopirovat, pokud bude pouzitelne.<br>
<br>
   Jirka<br>
<div><div></div><div class="h5"><br>
<br>
On 28/09/2010, slush &lt;<a href="mailto:slush@centrum.cz">slush@centrum.cz</a>&gt; wrote:<br>
&gt; Zdravim,<br>
&gt;<br>
&gt; resim uz pekelne dlouho problem, jak z Pythonu uploadovat velky soubor pres<br>
&gt; PUT/POST - pokud mozno nejakym standardnim zpusobem.<br>
&gt;<br>
&gt; Problem jsem zatim vyresil pomoci mmap. Nelibi se mi ale, ze na 32bit<br>
&gt; systemech je maximalni velikost uploadovaneho souboru ~4GB. Zaroven jsem ale<br>
&gt; neprisel na to, jak donutit urllib2, aby s daty pracovala jako se streamem<br>
&gt; (file-like objektem) a ne jako se stringem. Posledni napad je napsat si<br>
&gt; &#39;string-like object&#39;, ktery bude doopravdy soubor a nemapovat cely jeho<br>
&gt; obsah na pamet (jako dela mmap), ale seekovat a nejak to cist do bufferu.<br>
&gt; Prijde mi ale dost divne, ze by neexistovalo jednodussi reseni.<br>
&gt;<br>
&gt; Soucasna implementace je nasledujici:<br>
&gt;<br>
&gt;  from urllib2 import Request, urlopen<br>
&gt;<br>
&gt;    @classmethod<br>
&gt;     def _f2b(cls, f, size=None):<br>
&gt;        &#39;&#39;&#39;<br>
&gt;             Map files into memory and act as buffer.<br>
&gt;        &#39;&#39;&#39;<br>
&gt;         if isinstance(f, basestring):<br>
&gt;            # No conversion needed<br>
&gt;             return f<br>
&gt;        elif getattr(f, &#39;fileno&#39;, None):<br>
&gt;             # Map to memory<br>
&gt;            if size == None:<br>
&gt;                 # When size is already known, skip this<br>
&gt;                f.seek(0, os.SEEK_END)<br>
&gt;                 size = f.tell()<br>
&gt;                f.seek(0)<br>
&gt;             return mmap.mmap(f.fileno(), size)<br>
&gt;        else:<br>
&gt;             raise fs.errors.UnsupportedError(&quot;Cannot handle type %s&quot; %<br>
&gt; type(f))<br>
&gt;<br>
&gt; @classmethod<br>
&gt;     def put(cls, path, data, size=None):<br>
&gt;         class PutRequest(Request):<br>
&gt;             def __init__(self, *args, **kwargs):<br>
&gt;                 self.get_method = lambda: &#39;PUT&#39;<br>
&gt;                 Request.__init__(self, *args, **kwargs)<br>
&gt;<br>
&gt;         data = cls._f2b(data, size=size)<br>
&gt;         req = PutRequest(&#39;&#39;.join([cls.webapi, path]), data,<br>
&gt; headers=cls.headers)<br>
&gt;         return urlopen(req)<br>
&gt;<br>
&gt;<br>
&gt; Diky za kazdou radu.<br>
&gt;<br>
&gt; Marek<br>
&gt;<br>
</div></div>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</blockquote></div><br>