Hi Antony, Thanks so much again for sharing your insights. I have been playing with uploadfolder, your suggestion below and from another thread (uploadfolder=os.path.join(request.folder, 'uploads', str(auth.user.id) if auth.user else '') work. However what I really want to do is to separate the files being uploaded based on a company_id. Say an user comes to my site, register as admin user for his company based on group assignment, then he / she will be instructed to register his/her company details including the logo image (being uploaded). Now I want to set this top-level upload folder to be company_id, however I will only get the company_id after i submit the form, I don't want to set the top-level upload folder based on auth.user.id because this admin user can create more users for this company for day-to-day tasks, I want to group all the file system consumption based on company.
I think about computing the next_company_id by doing below, but if i have 2 users trying to do the same thing, i will have a race condition and get error. I search in this forum to see how people deal with auto increment field, Mathieu suggested Field('ref_number', compute=lambda r: r['id'] + 100), but i don't seem to be able to apply it in uploadfolder attribute, any suggestion will be much appreciated. company_rows=db().select(db.company.ALL) if company_rows: last_company_row=company_rows.last() next_company_id=last_company_row.id + 1 else: next_company_id=1 On Thursday, September 28, 2017 at 12:32:46 AM UTC+8, Anthony wrote: > > On Wednesday, September 27, 2017 at 5:04:27 AM UTC-4, Rudy wrote: >> >> Dave / Anthony, >> >> Thanks for your input and confirmation. I will look into the code to see >> how i can use the uuid to separate files for multi-tenant purpose. >> > > If you're going to be accessing the uploaded files based on the filenames > stored in the database, you don't necessarily need to do anything with the > filesystem to enable multi-tenant functionality. The database records will > identify the tenants and therefore enable you to identify which files > belong to which tenants. > > However, if you need to easily be able to identify files associated with a > given tenant from the filesystem only (i.e., without reference to the > database records), then you could create separate top-level upload folders > for each client. In your code, you would do that by dynamically specifying > the "uploadfolder" argument of the Field() constructor to set a unique > folder for each client. For example: > > uploadfolder=os.path.join(request.folder, 'uploads', tenant_id) > > You could still leave uploadseparate=True, and then you'll get folders > like: > > /uploads/1/company.logo/ab/ > /uploads/2/company.logo/dy/ > > where 1 and 2 are the id's of different tenants. > > Anthony > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.