that did the trick. thanks massimo! note to myself: always append 'b' to the mode of the file open command to make it work on all platforms (including windows).
On May 20, 6:07 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > It works for me but I think the problem is that > > shutil.copyfileobj(request.vars.filename.file,open(path,'w')) > > should be > > shutil.copyfileobj(request.vars.filename.file,open(path,'wb')) > > else when you read it back some of the binary info in the file will be > messed up. > > Massimo > > On May 20, 10:18 am, Hans <johann.scheibelho...@easytouch-edv.com> > wrote: > > > could you reproduce it on your side? > > > On May 18, 4:34 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > Thank you. I will look into this later today. > > > > On May 18, 7:35 am, Hans <johann.scheibelho...@easytouch-edv.com> > > > wrote: > > > > > diff did not help since excel files are considered binary format. > > > > the copies are bigger than the original.xls. I also tried to copy the > > > > copy and the 2nd copy is again bigger in size than the 1st copy. > > > > interesting is that shutil.copyfileobj() and .write(read()) generate > > > > identical files, both corrupt for excel and bigger than the original. > > > > > Massimo, I sent you an email with a web2py mini app and small .xls > > > > sample files. > > > > can you reproduce the problem? > > > > > thanks, > > > > hans > > > > > my test environment: > > > > web2py 1.61.4 > > > > WinXP Pro SP3 > > > > Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit > > > > (Intel)] > > > > > On May 13, 10:37 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > from what I understood something was being removed, not added. Am I > > > > > wrong? > > > > > > On May 13, 3:24 pm, Kacper Krupa <pageno...@gmail.com> wrote: > > > > > > > You should try with smaller files and create diff (to check what is > > > > > > added). It seams to be something between uploading <-> saving. > > > > > > > On May 13, 9:57 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > > > > wrote: > > > > > > > > web2py 1.61.4 > > > > > > > WinXP Pro SP3 > > > > > > > Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 > > > > > > > bit > > > > > > > (Intel)] > > > > > > > > If there is anything I can do to mail it down on my side then let > > > > > > > me > > > > > > > know! > > > > > > > > Thanks, > > > > > > > Hans > > > > > > > > On May 13, 9:40 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > > > > The problem is not so much to solve it but to reproduce it. > > > > > > > > > what version of web2py are you running? which os? which python > > > > > > > > version? > > > > > > > > > Massimo > > > > > > > > > On May 13, 2:32 pm, Hans > > > > > > > > <johann.scheibelho...@easytouch-edv.com> > > > > > > > > wrote: > > > > > > > > > > bumping this one since I still could not fix that. Has anyone > > > > > > > > > managed > > > > > > > > > to solve this yet? > > > > > > > > > > On May 9, 1:09 am, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > > > > > > My bad. This was correct: > > > > > > > > > > shutil.copyfileobj(request.vars.filename.file,open(path,'w')) > > > > > > > > > > > I am surprised you still get a corruptedfile. let me run > > > > > > > > > > some tests. > > > > > > > > > > > Massimo > > > > > > > > > > > On May 8, 5:05 pm, Hans > > > > > > > > > > <johann.scheibelho...@easytouch-edv.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > shutil.copyfileobj(request.vars.filename,open(path,'w')) > > > > > > > > > > > > raises exception: (<type 'exceptions.AttributeError'>, > > > > > > > > > > > AttributeError > > > > > > > > > > > ('read',), <traceback object at 0x03FC0CB0>) > > > > > > > > > > > > tried also > > > > > > > > > > > > > > > > > > > > > > shutil.copyfileobj(request.vars.filename.file,open(path,'w')) > > > > > > > > > > > which creates a copy, but again a corrupt copy. > > > > > > > > > > > > This tests now were done just on windows xp. > > > > > > > > > > > > Any other ideas how to solve this? > > > > > > > > > > > > Hans > > > > > > > > > > > > On May 8, 10:29 pm, mdipierro <mdipie...@cs.depaul.edu> > > > > > > > > > > > wrote: > > > > > > > > > > > > > It may be an issue with buffer size. Try > > > > > > > > > > > > > import shutil > > > > > > > > > > > > shutil.copyfileobj(request.vars.filename,open(path,'w')) > > > > > > > > > > > > > Massimo > > > > > > > > > > > > > On May 8, 2:56 pm, Hans > > > > > > > > > > > > <johann.scheibelho...@easytouch-edv.com> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > There is a problem with the following code line > > > > > > > > > > > > > > > > > > > > > > > > > > > > > open(path,'w').write(request.vars.filename.file.read()) > > > > > > > > > > > > > > It creates thefile'a_dummy_file_name.xls' but it is > > > > > > > > > > > > > not the same > > > > > > > > > > > > > size as the originalfile, for example: > > > > > > > > > > > > > 6790KB original.xls > > > > > > > > > > > > > 6862KB a_dummy_file_name.xls > > > > > > > > > > > > > > If I try to open the dummyfilewith excel or open > > > > > > > > > > > > > office it says the > > > > > > > > > > > > >fileis corrupt. > > > > > > > > > > > > > I've tried to copy thefilemanually right after this > > > > > > > > > > > > > code line and > > > > > > > > > > > > > continued execution from there onward...rest works > > > > > > > > > > > > > nicely. > > > > > > > > > > > > > > I tried on windows and on ubuntu, seems the same > > > > > > > > > > > > > problem. > > > > > > > > > > > > > > Any idea how to solve that issue with the > > > > > > > > > > > > > corruptfile(=getting a > > > > > > > > > > > > > exact copy) ? > > > > > > > > > > > > > > thanks, > > > > > > > > > > > > > hans > > > > > > > > > > > > > > On May 7, 10:56 pm, mdipierro > > > > > > > > > > > > > <mdipie...@cs.depaul.edu> wrote: > > > > > > > > > > > > > > > This should do > > > > > > > > > > > > > > > def excel_read(): > > > > > > > > > > > > > > result={} > > > > > > > > > > > > > > if request.vars.filename != None: > > > > > > > > > > > > > > try: > > > > > > > > > > > > > > import xlrd > > > > > > > > > > > > > > path=os.path.join > > > > > > > > > > > > > > (request.folder,'private','a_dummy_file_name.xls') > > > > > > > > > > > > > > > > > > > > > > > > > > > > open(path,'w').write(request.vars.filename.file.read()) > > > > > > > > > > > > > > book = xlrd.open_workbook(path) > > > > > > > > > > > > > > result['The number of worksheets > > > > > > > > > > > > > > is']=book.nsheets > > > > > > > > > > > > > > result["Worksheet name(s)"]= > > > > > > > > > > > > > > book.sheet_names() > > > > > > > > > > > > > > sh = book.sheet_by_index(0) > > > > > > > > > > > > > > result['sh.name']=sh.name > > > > > > > > > > > > > > result['sh.nrows']=sh.nrows > > > > > > > > > > > > > > result['sh.ncols']=sh.ncols > > > > > > > > > > > > > > result['Cell D30 > > > > > > > > > > > > > > is']=sh.cell_value(rowx=29, colx=3) > > > > > > > > > > > > > > for rx in range(sh.nrows): > > > > > > > > > > > > > > result['row ' + str(rx)]=sh.row(rx) > > > > > > > > > > > > > > except: > > > > > > > > > > > > > > response.flash = T('excel_read > > > > > > > > > > > > > > exception') > > > > > > > > > > > > > > return dict(result=result) > > > > > > > > > > > > > > > for you request.vars.filename is a cgi.FieldStorage > > > > > > > > > > > > > > object. It is not > > > > > > > > > > > > > > a namedfile. > > > > > > > > > > > > > > It containes > > > > > > > > > > > > > > - request.vars.filename.file(a buffered input > > > > > > > > > > > > > > stream) > > > > > > > > > > > > > > - request.vars.filename.filename (the original > > > > > > > > > > > > > > filename) > > > > > > > > > > > > > > For you to access it you should read the stream and > > > > > > > > > > > > > > save it with a > > > > > > > > > > > > > > name. Do not use the original filename to avoid > > > > > > > > > > > > > > directory traversal > > > > > > > > > > > > > > attacks. > > > > > > > > > > > > > > > Massimo > > > > > > > > > > > > > > > On May 7, 2:58 pm, Hans > > > > > > > > > > > > > > <johann.scheibelho...@easytouch-edv.com> > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > I'm trying to import some content directly from > > > > > > > > > > > > > > > an excelfilewhich > > > > > > > > > > > > > > > the user selects from itslocalfiles. I've taken > > > > > > > > > > > > > > > and modified code > > > > > > > > > > > > > > > from the admin controller for retrieving the > > > > > > > > > > > > > > > path/filename thru a nice > > > > > > > > > > > > > > >fileselectionwindow. > > > > > > > > > > > > > > > > The problem: I get only the filename of a locked > > > > > > > > > > > > > > > temporaryfile, not > > > > > > > > > > > > > > > the original filename. If I close the > > > > > > > > > > > > > > > temporaryfile, to remove the > > > > > > > > > > > > > > > lock, thefileis automatically deleted... > > > > > > > > > > > > > > > > I would not mind to work with a temporary copy of > > > > > > > > > > > > > > > the originalfile, > > > > > > > > > > > > > > > but retrieving the original path/filename thru a > > > > > > > > > > > > > > > similarfile > > > > > > > > > > > > > > >selectionwindow would be prefered. How can this be > > > > > > > > > > > > > > >achieved? > > > > > > > > > > > > > > > > Hans > > > > > > > > > > > > > > > P.S. I'm using the xlrd module > > > > > > > > > > > > > > > fromhttp://pypi.python.org/pypi/xlrd > > > > > > > > > > > > > > > > ### viewer ### > > > > > > > > > > > > > > > {{extend 'layout.html'}} > > > > > > > > > > > > > > > <h1>excel_read.html template</h1> > > > > > > > > > > > > > > > > <div class='frame'> > > > > > > > > > > > > > > > <h2>{{=t2.T('SelectFile')}}</h2> > > > > > > > > > > > > > > > {{=FORM('File: > > > > > > > > > > > > > > > ',INPUT(_type='file',_name='filename'),INPUT > > > > > > > > > > > > > > > (_type='submit', _value='submit'))}} > > > > > > > > > > > > > > > </div> > > > > > > > > > > > > > > > > <div class='frame'> > > > > > > > > > > > > > > > {{=BEAUTIFY(response._vars)}} > > > > > > > > > > > > > > > </div> > > > > > > > > > > > > > > > > ### controller ### > > > > > > > > > > > > > > > def excel_read(): > > > > > > > > > > > > > > > result={} > > > > > > > > > > > > > > > if request.vars.filename != None: > > > > > > > > > > > > > > > try: > > > > > > > > > > > > > > > import xlrd > > > > > > > > > > > > > > > > # >>> can't locate the originally selected > > > > > > > > > > > > > > > path/filename in > > > > > > > > > > > > > > > request.vars.filename <<< > > > > > > > > > > > > > > > book = > > > > > > > > > > > > > > > xlrd.open_workbook(request.vars.filename.file.name) > > > > > > > > > > > > > > > # >>> with a valid path/filename it works <<< > > > > > > > > > > > > > > > book = > > > > > > > > > > > > > > > xlrd.open_workbook('F:/Documents and > > > > > > > > > > > > > > > Settings/Hans/ > > > > > > > > > > > > > > > Desktop/test.xls') > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---