Hi Telerik Folk!
First of all, the cloud uploader is totally what we needed! Our web application is hosted as Microsoft's Windows Azure Website (WAWS), and having the file stream straight into blobage is critical since WAWS has only limited local disk space for "temp" storage of uploads.
Nicely done, and we really like the UI!
Two things on our wish list:
1) We have many storage accounts in Azure, each located in multiple places around the world. Also, each collection of files is stored in it's own "Collection". So we need to be able to change the storage location for each file being uploaded. I notice there is mention of this capability using the handler. Could you please provide a code example?
2) Right now we are encrypting files (using AES 256 bit) after they upload by copying the blob from where it landed, to it's final destination. This works fine with small files, but with large files this takes a long time to happen. Our wish is to encrypt the stream on the upload. I have code I can send you that is doing this. It's real easy. Also, it would be great to add three optional properties added:
* AES Encryption (bool)
* Bit option (int)
* InitializationVector (byte[])
* SymetricKey (byte[])
Thanks! And fantastic work!
-Eric
7 Answers, 1 is accepted
I am sending you a sample project which you could use to achieve request 1). We are going to consider an easier way to implement this. E.g. by overriding one method in the CloudUpload handler.
Regarding to request 2) now it is not possible to achieve this. Your suggestion is valuable and we are going to consider to expose an access point in our handler where the developer could manipulate the uploaded stream.
Regards,
Peter Filipov
Telerik

I am looking for the same functionality. I have different accounts(this we can get based on the person joining or raising the request) of Azure. May I know how to change the account name and key based on the Login . I also checked the above given example. But I couldn't find anything useful. Can you tell in depth how can we pro-grammatically specify the accounts in cloud Upload.
Moreover I couldn't find any configuration class for the file upload.
Thanks & Regards,
Mohan Prasath S J
You could only change programmatically the KeyName under which the file is stored. The described functionality is not implemented yet. We are aware of it and will do our best to add it for the next release.
Let me know if you have other suggestions.
Regards,
Peter Filipov
Telerik

I am currently using the CloudUploader to upload the file(s) into a "temporary" area.
Next, when the CloudUploader is finished uploading the files, it fires a JavaScript event. I capture this event to force a "post back."
When the postback happens, I read the FileUploaded (I think that is the name), property of the ClouldUploader event.
Using this list of uploaded files, I now "copy" the files from where they are loaded, to the final resting place in Azure blobbage.
During this last step you can move the files into any container or storage account you wish. You can even change file names and encrypt the files. This works well with small files, but large ones this does delay things.
Cheers,
-Eric

@Peter: Thanks for your reply. Been fed-up with this for one whole day. Now I am finally move to find a different solution.
@Eric: Thank you for your answers. Your solution would work if I am using only single account. But I am using different login accounts for different users. Let me know if you have any solution also.
Regards,
Mohan

I don't know how you have your account configured, but for me, I use a single account to upload the blob into Microsoft Azure "temporary" area, then move the blob to another container based on the user login.
This might help. You can then use the asynchronous cross account copy.
In effect, you using a single account with Cloud Uploader to files into a "temporary" area. Then, use the asynchronous cross account copy to move the files into your final destination.
An alternative way (and I think slower), is to copy from stream you can use (read the temporary blob into a stream, then write it back out again). Here is psudeo code:
CloudBlockBlob tempBlob = tempContainer.GetBlockBlobReference("temp_reference");
CloudBlockBlob blobToCreate = container.GetBlockBlobReference("final_location_reference");
blobToCreate.UploadFromStream(tempBlob.OpenRead());
Both references above can be built using different accounts, and, different containers.
Trick then becomes where to put the Blob Account information? If the accounts are static, then, the best location is to store your blob account information in the <appSettings> of your web.config.
Better yet, if you are using Windows Azure Web Sites (WAWS), store the keys in the <appSettings> section of your dashboard (and not in your web.config). This is very secure.
If your accounts are very dynamic, then, store the keys in a blob table (you can even get tricky and encrypt the info there).
Hope this gives a ray of hope!
Good night from California!
-Eric

Empty examples not that usefull..
public class HandlerTest : Telerik.Web.UI.CloudUploadHandler
{
}