Are you using trunk or stable? Can you try trunk?

On Monday, 3 December 2012 03:59:48 UTC-6, Paulo wrote:
>
> Hi again.
> First of all: thanks a lot for your answer Massimo, I know you have a lot 
> to do, thanks for patiently helping the rookies.
>
> I had already tried that code (saw from an old post) but it dont work too. 
> Tried again and it gives the same exact error. This is the full code I used:
>
> import os
> import shutil
> form = FORM(INPUT(_type='file',_name='myfile'),INPUT(_type='submit'))
> if form.accepts(request.vars,session):
>     shutil.copyfileobj(form.vars.myfile.file, open(os.path.join(request.
> folder,'uploads','filename.wav'),'wb'))
>     response.flash = 'form accepted'
> elif form.errors:
>     response.flash = 'Error'
> return dict(form=form)
>
> I tried also with SQLFORM.factory but it is the same.
>
> Small files work, larger files (200 mbs) give this error.
>
> Some tips?
>
>
>
> Sábado, 1 de Dezembro de 2012 18:55:01 UTC, Massimo Di Pierro escreveu:
>>
>> You cannot do:
>>
>> open(...,'wb').write(form.vars.myfile.file.read())
>>
>> because this read the entire file in memory before writing it. You need 
>> to use
>> http://docs.python.org/2/library/shutil.html
>> and do
>>
>> shutil.copyfileobj(form.vars.myfile.file, open(...,'wb'))
>>
>> Massimo
>>
>>
>> On Friday, 30 November 2012 10:11:48 UTC-6, Paulo wrote:
>>>
>>> Hi!
>>>
>>> I'm trying to create a very simple upload field, without any complex 
>>> mechanism. A user just uploads a file to a folder in the server (apache), 
>>> without web2py changing the file name, and without any db. I have some 
>>> dozens of files already in a folder in the server, I just need an upload 
>>> form to send new files easly, without having to go personally with an Usb 
>>> Pen to the server to copy new files.
>>>
>>> But I'm having an hard time doing it, and dont know why. With small 
>>> files (2mb docx file) it works perfectly. But when uploading a 300mbs wav 
>>> file it gives an error ticket:
>>> <type 'exceptions.MemoryError'>
>>> TRACEBACK
>>>
>>> 1.
>>> 2.
>>> 3.
>>> 4.
>>> 5.
>>> 6.
>>> 7.
>>> 8.
>>> 9.
>>> 10.
>>> 11.
>>> 12.
>>> 13.
>>> 14.
>>> 15.
>>> 16.
>>> 17.
>>> 18.
>>> 19.
>>> 20.
>>> 21.
>>> 22.
>>> 23.
>>> 24.
>>> 25.
>>> 26.
>>> 27.
>>> 28.
>>> 29.
>>> 30.
>>> 31.
>>> 32.
>>>
>>> Traceback (most recent call last):
>>>   File "D:\web2py\gluon\restricted.py", line 212, in restricted
>>>     exec ccode in environment
>>>   File 
>>> "D:/web2py/applications/Upload_Fala_Bracarense/controllers/default.py" 
>>> <https://cehum.ilch.uminho.pt/admin/default/edit/Upload_Fala_Bracarense/controllers/default.py>,
>>>  line 121, in <module>
>>>   File "D:\web2py\gluon\globals.py", line 188, in <lambda>
>>>     self._caller = lambda f: f()
>>>   File 
>>> "D:/web2py/applications/Upload_Fala_Bracarense/controllers/default.py" 
>>> <https://cehum.ilch.uminho.pt/admin/default/edit/Upload_Fala_Bracarense/controllers/default.py>,
>>>  line 28, in index
>>>     form = SQLFORM.factory(Field('myfile', 'upload', 
>>> uploadfolder='/static')).process()
>>>   File "D:\web2py\gluon\html.py", line 2170, in process
>>>     self.validate(**kwargs)
>>>   File "D:\web2py\gluon\html.py", line 2109, in validate
>>>     if self.accepts(**kwargs):
>>>   File "D:\web2py\gluon\sqlhtml.py", line 1281, in accepts
>>>     **kwargs
>>>   File "D:\web2py\gluon\html.py", line 2022, in accepts
>>>     self._traverse(False, hideerror)
>>>   File "D:\web2py\gluon\html.py", line 842, in _traverse
>>>     newstatus = c._traverse(status, hideerror) and newstatus
>>>   File "D:\web2py\gluon\html.py", line 842, in _traverse
>>>     newstatus = c._traverse(status, hideerror) and newstatus
>>>   File "D:\web2py\gluon\html.py", line 842, in _traverse
>>>     newstatus = c._traverse(status, hideerror) and newstatus
>>>   File "D:\web2py\gluon\html.py", line 842, in _traverse
>>>     newstatus = c._traverse(status, hideerror) and newstatus
>>>   File "D:\web2py\gluon\html.py", line 853, in _traverse
>>>     self._postprocessing()
>>>   File "D:\web2py\gluon\html.py", line 1762, in _postprocessing
>>>     _value = str(self['_value'])
>>>   File "C:\Python27\Lib\cgi.py", line 515, in __repr__
>>>     self.name, self.filename, self.value)
>>> MemoryError
>>>
>>> IN FILE: 
>>> D:\WEB2PY\APPLICATIONS\UPLOAD_FALA_BRACARENSE\CONTROLLERS/DEFAULT.PY
>>> I have tried a lot of diferent ways. I have read everything I could find 
>>> in the web. I found a topic with the same problem but no solution I could 
>>> use. Anyone can help with some tips?
>>>
>>> This the code in the controller:
>>>
>>> import os
>>>
>>> def index():
>>>     form = FORM(INPUT(_type='file',_name='myfile'),INPUT(_type='submit'))
>>>     if form.accepts(request.vars,session):
>>>         
>>> open(os.path.join(request.folder,'uploads','filename.wav'),'wb').write(form.vars.myfile.file.read())
>>>     return dict(form=form)
>>>
>>> I have tried a lot of different ways, this only an example. I used 
>>> SQLFORM.factory {form = SQLFORM.factory(Field('myfile', 'upload', 
>>> uploadfolder='/static')).process()}, shutil 
>>> {shutil.copyfileobj(request.vars.myfile.file,open(os.path.join(request.folder,'static','filename.txt'),'wb'))},
>>>  
>>> and a lot of different code variants but none worked. Its allways the same: 
>>> with small files it works, with a 200mb file it gives an error.
>>>
>>>
>>> Anyone can help me understand this problem? The max file size I need to 
>>> upload is 500mb. It will be used by only one person, with a login, so there 
>>> is no need to a complex mechanism, and files need to mantain the same name. 
>>> I just need the upload to work. 
>>>
>>> Thanks and sorry for my bad english.
>>>
>>>
>>>
>>>
>>> I want a user to be able to upload a file to a directory in the server 
>>> (apache), without changing the file name, and wihout databases. A simple 
>>> and direct upload, so a friend of mine can store some files in
>>>
>>

-- 



Reply via email to