← Back to team overview

openerp-connector-community team mailing list archive

Re: Storing Images

 

Hi Paul and Markus.
I did some update on my code
https://code.launchpad.net/~akretion-team/server-env-tools/server-env-tools

And I start to refactor the product image module based on it
https://code.launchpad.net/~akretion-team/openerp-product-attributes/openerp-product-attributes-product-image

Note, I am thinking about adding an object "storage.configuration" and a
field "storing_configuration_id" on the model "ir.model.fields". The idea
will to use a default storing configuration for every field (on file sytem
for exemple) but after we will be able to customise on every field from the
backend where where you want to store each binary/image fields (database,
S3, ftp, SFTP, Filestore....)
Do you like the idea? (not so hard to implement)




2014-05-14 11:02 GMT+02:00 Paul Catinean <paulcatinean@xxxxxxxxx>:

> Hello Sebastien,
>
> I was just trying to find a solution for this yet again and I noticed
> there is no complete module out there for product images that is accessible
> to everyone (you are right about the default_code)
>
> This is an interesting project and I hope to contribute to it if I can,
> code, testing etc
>
> Thanks for you efforts and keep us posted
>
>
> On Wed, May 14, 2014 at 11:44 AM, Markus Schneider <
> markus.schneider@xxxxxxxxxx> wrote:
>
>> Hi Sebastien,
>>
>> we just looking on your solution to get ideas how to implemented a
>> Attachment field with additional meta data. This helps us a lot, thank
>> you for sharing your work.
>>
>> So i just want to share my thoughts about your implementation. So you
>> solve two problems in one module. I suggest to split it.
>>
>> 1) Part: Giving us a new field typ which store more metadata for a file,
>> like Imagesize.
>>
>> 2) Part: Changing the storage behaviour of ir.attachment. So for your
>> case, that you can store the files in a separate path in the
>> file-system. (I think the reason is to provide them directly with other
>> fast web server).
>>
>> As i know there are some other concepts to extend the storage location
>> for ir.attachment like MongoDB or some cloud specific API. So at the end
>> it would be great to combine some metadata binary field with some
>> storage location module total free.
>>
>> Kind Regards
>>
>> Markus
>>
>> On 01.05.2014 11:55, Sebastien Beau wrote:
>> > Hi all,
>> >
>> > If like me you want to store image and binary in you file system instead
>> > of the database this mail can interest you.
>> >
>> > Since version 6 we make some improvement in the product image module in
>> > order to be able to store image in the file system
>> > (
>> http://bazaar.launchpad.net/~product-core-editors/openerp-product-attributes/7.0/files/head:/product_images/
>> )
>> > But I am not satisfy by the work done (I did it) because this
>> > implementation only support the image of product. More over we use the
>> > product default code in the path for storing the image and this make
>> > mandatory the default code on product which do not fit with every
>> customer.
>> >
>> > After thinking twice, I think the best solution is to introduce new type
>> > of field that will manage the storage for us. Indeed if we implement
>> > this with a field, we can use it everythere (product, category, user,
>> > company....)
>> >
>> > Here is my proposal:
>> > Adding 3 new fields:
>> > - BinaryField
>> > - ImageField
>> > - ImageResizeField
>> >
>> >
>> > An exemple of how using it will be this :
>> >
>> >
>> >     _columns = {
>> >         'binary_test': fields.BinaryField('Test Binary'),
>> >         'image_test': fields.ImageField('Test Image'),
>> >         'image_test_resize': fields.ImageResizeField(
>> >             related_field='image_test',
>> >             string='Test Image small',
>> >             height=64,
>> >             width=64,
>> >             ),
>> >     }
>> >
>> > Adding this kind of field will also create this field (on fly):
>> >
>> > - binary_test_info_id
>> > - image_test_info_id
>> > - image_test_resize_info_id
>> >
>> > Why adding this field?
>> > The aim is simple, I want to read the metadata of my image (path, size,
>> > extension...)
>> > For exemple, if you build an external application maybe you want to get
>> > the path of the image.
>> > In this case you just have to do
>> > "product.image_test_info_id.store_fname" and you get the path.
>> > Acceding to the image with you external application using the images
>> > served by nginx (or apache) is really easy.
>> >
>> > I know that "Explicit is better than implicit." but I think It will be a
>> > paint to add this field manually. I don't see any other solution that
>> > make easy (and compatible with the existing API) to access to the image
>> > content or to the image metadata (using the context is not a good idea
>> > because you may access to the content of a field and the information of
>> > an other field at the same time)
>> >
>> >
>> > I start a POC here :
>> >
>> https://code.launchpad.net/~akretion-team/server-env-tools/server-env-tools
>> >
>> > How this work
>> >
>> > First the object "binary.binary"
>> > =================================
>> >
>> > It's just a table that store the metadata of my binary field (image,
>> > pdf, video...) and store the path of the binary.
>> >
>> > I try to reuse the function to create/write/delete of the
>> > "ir.attachment" class, because is kind of the same feature.
>> >
>> >
>> > Then the new fields :
>> > ========================
>> >
>> > BinaryField
>> > --------------
>> >
>> > BinaryField is a function field with a "fnct" and a "fnct_inv" already
>> > defined. Basically when I add a pdf in this kind of field, the "fnc_inv"
>> > will create (or update) the "binary.binary" and store the id of the
>> > "binary.binary" in the field "my_field_info_id"
>> >
>> >
>> > ImageField
>> > ---------------
>> > ImageField inherit of BinaryField. The only difference is that
>> > ImageField can have resized Image linked so this class will trigger a
>> > refresh of resized image
>> >
>> >
>> > ImageResizeField
>> > -----------------
>> > ImageResizeField inherit of ImageField. The best way to explain it is to
>> > give an exemple. Let's say that we have added the fields "image_test"
>> > and "image_test_resize" (like on the top of my email)
>> >
>> > First setting a image in "image_test"
>> > -------------------------------------
>> > If you set a image into the field "image_test" then the
>> > "image_test_resize" will be refresh.
>> > The ImageResizefield like the BinaryField create a "xxx_info_id" field.
>> > So in this case the resized image is stored in a "binary.binary" and the
>> > id of this binary is stored in "image_test_resize_info_id"
>> >
>> >
>> > First setting a image in "image_test_resize"
>> > ---------------------------------------------------
>> > Giving the posibility to set the image from the resize field is
>> > necessary (OpenERP already do that on product image).
>> > So if you set an image in this king of field, the image will be store in
>> > the ImageField related, this mean in the "image_test" and then the cache
>> > of the ImageResizeField will be refresh.
>> >
>> >
>> > If you need more details, ask me. I will push some change/fix in the
>> > branch so be carefull when you update the code when you test it.
>> > (creating a new db after pulling the code maybe the best idea)
>> >
>> >
>> > If you are ok with that I will propose a new version of product_image
>> > based on it.
>> >
>> > If you have better naming idea, share it !
>> >
>> > Thanks for your feedback.
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>>
>> --
>> Dipl.-Comp.-Math. Markus Schneider
>> Softwareentwickler
>>
>> initOS GmbH & Co. KG
>> An der Eisenbahn 1
>> 21224 Rosengarten
>>
>> Mobil:   +49 (0)172 2303699
>> Phone:   +49 (0)4105 5615613
>> Fax:     +49 (0)4105 5615610
>>
>> Email:   markus.schneider@xxxxxxxxxx
>> Web:     http://www.initos.com
>>
>> Geschäftsführung:
>> Dipl. Wirt.-Inf. Frederik Kramer & Dipl.-Ing. (FH) Torsten Francke
>> Haftende Gesellschafterin: initOS Verwaltungs GmbH
>>
>> Sitz der Gesellschaft: Rosengarten – Klecken
>> Amtsgericht Tostedt, HRA 201840
>> USt-IdNr: DE 275698169
>> Steuer-Nr: 15/205/21402
>>
>> --
>> Mailing list: https://launchpad.net/~openerp-connector-community
>> Post to     : openerp-connector-community@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~openerp-connector-community
>> More help   : https://help.launchpad.net/ListHelp
>>
>
>

Follow ups

References