Aha.
I could not find the call to stream.read in the pdf manual.
Manual uploads appears to be removed from the on-line manual. Is that
intentional? If not I could write up a patch for the book in the next day
or so.
By the way, the code allows uploads to be attached to any table in the
application. I can put it on github with a bsd license if you think anyone
would be interested.
Cliff Kachinske
On Friday, November 16, 2012 5:20:07 PM UTC-5, Massimo Di Pierro wrote:
>
> Yes:
>
> att_id = db2.attachments.insert(
> attachment = db2.attachments.attachment.store(...),
> filename = fname,
> Description =
> r.attachments.attachment_brief_description,
> )
> needs
>
> att_id = db2.attachments.insert(
> attachment = db2.attachments.attachment.store(...),
> payload = stream.read(),
> filename = fname,
> Description =
> r.attachments.attachment_brief_description,
> )
>
> On Friday, 16 November 2012 09:18:47 UTC-6, Cliff Kachinske wrote:
>>
>> The title describes the problem.
>>
>> Any suggestions as to what I might do? Would it be simpler if I just
>> uploaded to a directory? I'm archiving for auditability, so I suppose
>> there would still be a way to get at earlier versions of uploaded files.
>>
>> Here is the model:
>>
>> db.define_table('attachments',
>> Field('attachment', 'upload', uploadfield='payload'),
>> Field('filename', length=512),
>> Field('Description', 'text'),
>> Field('payload', 'blob'),
>> migrate=init_migrate,
>> )
>> Common fields are auth.signature and a field called "tenant_link", which
>> is how I implemented the request_tenant functionality before Massimo
>> announced it.
>>
>> Here is the controller code:
>> for r in rows:
>> ...
>> myfile = mypath + r.attachments.file_name + '.' +
>> r.attachments.file_ext
>> try:
>> stream = open(myfile, 'rb')
>> except IOError:
>> no_finds.append(DIV('unable to find {}'.format(myfile)))
>> continue
>> else:
>> ok.append(DIV('found {}.{}, aka {}'.format(
>> r.attachments.file_name, r.attachments.file_ext, fname
>> )))
>> att_id = db2.attachments.insert(
>> attachment = db2.attachments.attachment.store(
>> stream, '{}.{}'.format(
>> r.attachments.file_name,
>> r.attachments.file_ext
>> )
>> ),
>> filename = fname,
>> Description =
>> r.attachments.attachment_brief_description,
>> )
>>
>> The insert is successful except the payload field is never populated.
>> Here is a snippet of the results from this postgres query, "SELECT id,
>> filename, octet_length(payload) from attachments;"
>>
>> 9 | apt-get-output.txt
>> | 10772
>> 10 | a_h_hits.txt
>> | 24164
>> 11 | a_h_hits.txt
>> | 24164
>> 12 | greg-free-bizcard
>> | 215288
>> 27 | Tank Thickness ML.doc
>> |
>> 28 | Tank Thickness ML.doc(1)
>> |
>> 29 | A short short file
>> |
>> 30 | hello.txt
>> |
>>
>> Records 9, 10 and 11 were uploaded while testing the interface. Records
>> 12 and up were created using the above script.
>>
>>
--