Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Upload image event in Asset Management

Vote:
 

Hello,

I am trying to catch the event of uploading images to Asset Management in EPiServer Commerce Manager 7.0 in order to create 3 folders in the original folder where the images were uploaded, in which I will upload resized images.

For instance, if the user uploads Image1.jpg to Folder1, I will need to do the following:

- create the "fullsize" folder and move the original file (Image1.jpg)

- resize Image1.jpg to some dimensions (47x41) and move the result to a new folder called "icon"

- resize Image1.jpg to other dimensions (306x265) and move the result to a new folder called "thumbnail"

So, at the end of the process, Folder1 will contain 3 folders: "fullsize" (containing Image1.jpg), "icon" (containing Image1-icon.jpg) and "thumbnail" (containing Image1-thumbnail.jpg).

How do you suggest I do this? Is there an event that I can attach to in order to obtain this?

Regards,

Adrian

#112051
Oct 22, 2014 10:26
Vote:
 

Hi,

BlobStorage has an event named CreatedEvent:

static public event BlobEventHandler CreatedEvent;

If you are using the default PublicDiskStorageProvider, whenever it creates a blob, it will fire this event. You can hook into this to check if the blob is a image and create thumbnails for it.

Regards.

/Q

#112071
Oct 22, 2014 12:52
Vote:
 

I am using the default PublicDiskStorageProvider, but where how do I use the CreatedEvent? Do I need to create a IInitializableModule class for this? Can you give me an example?

#112162
Oct 23, 2014 14:56
Vote:
 

Given you're using Commerce R3 (7.0), no IInitializableModule is available. You can use Global.asax or IHttpModule instead.

Global.asax would be a simpler solution, just register this in your Application_Start method:

BlobStorage.CreateEvent += <your method here>

Regards.

/Q

#112165
Oct 23, 2014 15:43
Vote:
 

I have added the event in Global.asax and I have put a breakpoint in the event, but the breakpoint is not hit. Also, I have put this line in the event just to see if the event is fired or not:

LogManager.GetLogger("ErrorLogger").Debug("Test");

but it doesn't put anything in the logs when I am uploading an image in Commerce Manager.

#112166
Oct 23, 2014 16:04
Vote:
 

Hi Adrian,

Here's what I did to verify that I'm able to attach to the event.
Assuming you've got a Global.asax with no code-behind...
1. Add an Import directive for the Mediachase.BusinessFoundation.Blob namespace at the top.

<%@ Import Namespace="Mediachase.BusinessFoundation.Blob" %>

2. In the server-side script block, add a method at the end to be used to handle the Created event of BlobStorage.

void BlobStorage_CreatedEvent(object sender, BlobEventArgs args)
{
    LogManager.GetLogger(GetType()).Debug("Testing!!!");
}

3. In the server-side script block, find Application_Start to add some code at the end to do sanity check logging and attach to the CreatedEvent event of BlobStorage.

LogManager.GetLogger(GetType()).Debug("BlobStorage.CreatedEvent += new BlobEventHandler(BlobStorage_CreatedEvent);");
BlobStorage.CreatedEvent += new BlobEventHandler(BlobStorage_CreatedEvent);

4. Double-check log4net.config at the web root. Make sure that the root element has the right appenders enabled. Make sure the root/level/@value attribute is set to the right level (DEBUG in my case).

5. Restart the web app, try uploading a new image, and check the logs.
You should see entries similar to the following.

2014-10-27 10:14:26,605 [31] DEBUG ASP.global_asax - BlobStorage.CreatedEvent += new BlobEventHandler(BlobStorage_CreatedEvent);
2014-10-27 10:14:44,390 [50] DEBUG ASP.global_asax - Testing!!!

6. This test worked for me with both DiskBlobStorageProvider and PublicDiskStorageProvider (See \Configs\baf.config - blobConfiguration/storageProvder/@defaultProvider). If you reflect both classes in the Mediachase.BusinessFoundation.dll assembly (7.0.243.0) in the Mediachase.BusinessFoundation.Blob namespace, you'll see that both support the BlobStorage class's CreatingEvent and CreatedEvent. The DiskBlobStorageProvider supports a few more BlobStorage events, whereas PublicDiskStorageProvider does not.

#112313
Oct 27, 2014 18:37
Vote:
 

Hi Jeff,

I have made the changes you proposed, but I don't see anything in the logs. Do you have any idea why the event is not triggering?

Regards,

Adrian

#112483
Oct 29, 2014 8:01
Vote:
 

Hi again,

Now I can see the message in the logs.

Thank you,

Adrian

#112518
Oct 29, 2014 13:11
Vote:
 

Hi Jeff,

Can you give me an example of resizing the image in args.NewBlobInfo? I also want to see how you can create a folder on the same level as the one that the image is being uploaded and save the resized image in the newly created folder.

Can you please provide an example for this?

Regards,

Adrian

#112844
Nov 06, 2014 9:35
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.