I have a C# application that generates simple JPEG images. I need to be able to store these images and recall them at various times in the future. So, I'm looking for a turnkey, secure, CDN system. I have hacked my own together with a Windows server and IIS - I upload via FTP and request images over HTTP - but (1) there's, effectively, no need for it to be Windows and (2) its not very cost effective. I'll be generating approximately 1-2GB of images each month and I need to hold the images in perpetuity.
What are some of the turnkey options for storing this many images?
I suggest storing the images on Amazon S3. It's stable, widely supported, and can plug into a variety of workflows and security models. As of August 2011, pricing starts at $0.09/GB/month for storage, and $0.12/GB for transfer (with the first GB per month free).
While many people use S3 as a cheap and good-enough CDN, Amazon also offers Amazon Cloudfront, a "real" CDN that integrates neatly with S3.
Amazon maintains an official C# library that can talk to S3 and CloudFront, the AWS SDK for .NET.
I'm a fan of NetDNA http://www.netdna.com/ . I currently use them - good customer service, and inexpensive. Also, it is easy to plugin into Wordpress.
Check out Amazon Cloudfront http://aws.amazon.com/cloudfront/
It's their CDN product built on S3. You can use the available C# libraries, examples here http://aws.amazon.com/code/Amazon-S3/129
Related
I need to create a C# SQL CLR stored procedure to upload files (data exports) to AWS S3 buckets. These files will generally be very small.
The AWS SDK cannot be installed on the SQL Servers and I am finding it difficult to find any information about how to accomplish this.
I am looking for some examples or documentation on how to accomplish uploading files without using the SDK.
My experience is mainly SQL, limited amount of C#.
You can use Amazon S3 via a REST API: Amazon S3 REST API Introduction
However, it can get a little complex, especially when providing Authentication signatures.
I have some files(.txt, .doc, .xlsx etc) inside a bucket in my AmazonS3 drive and is it possible to perform a content level search through my C# application? That is, when we type a string and upon pressing key in my application, every files that contains the searched string in its content should list.
Is there any way to achieve this either using any method or even using WebAPI's.
Thanks in advance
Amazon S3 is purely a storage service. There is no search capability built into S3.
You could use services such as Amazon CloudSearch and Amazon Elasticsearch Service, which can index documents, but please note that this involves additional configuration and additional costs.
You won't be able to do all those file types you listed, but any of your files that are structured, or semi-structured, you could consider using the newly released AWS Athena which does allow searching of S3 file using an SQL-like language:
https://aws.amazon.com/athena/faqs/
Amazon Athena is an interactive query service that makes it easy to
analyze data in Amazon S3 using standard SQL. Athena is serverless, so
there is no infrastructure to setup or manage, and you can start
analyzing data immediately. You don’t even need to load your data into
Athena, it works directly with data stored in S3. To get started, just
log into the Athena Management Console, define your schema, and start
querying. Amazon Athena uses Presto with full standard SQL support and
works with a variety of standard data formats, including CSV, JSON,
ORC, Apache Parquet and Avro. While Amazon Athena is ideal for quick,
ad-hoc querying and integrates with Amazon QuickSight for easy
visualization, it can also handle complex analysis, including large
joins, window functions, and arrays.
I am developing a mobile client on Xamarin with a server on Azure Mobile Service.
I use Microsoft.WindowsAzure.MobileServices.MobileServiceClient to send application/json messages to the server.
Now I need to upload files too.
How can I use form/multipart with MobileServiceClient?
TIA
Azure Mobile Services only use data in tables, no files at all. Therefore, the MobileServicesClient is only built to exchange with table data.
You might use other Azure services like Blob Storage to put files there.
If you only need to store really small images, you can put them into the database as textdata, but this has many limitations. Chris Risner has a tutorial on his Blog.
I have a few MVC4 websites that share some of the same images / videos / pdfs etc. They are confidential: that is only authorized users can access them.
At the moment I just have the content in a folder under one of the web apps, and then I create a symlink to that folder from within the other web apps so that they share that directory. I don't want to do this because it makes things complicated for testing and deployment and would rather have some kind of CDN type of website to serve it.
What's the best practice here?
I guess you've answered your own question. Try using a CDN instead of having them inside your server(s) and shared across your other web apps. Some CDN's may or may not have authentication.
One CDN you might want to consider:
Amazon S3 (it has token auth)
Another is Softlayer (this also has auth)
If you really intend to create a CDN-like website, I would say, do a cost-benefit analysis. Is it worth to build it from scratch? Can you just get a CDN (with authentication, of course) and host it by yourself? Or can you just have it hosted externally (which might be more reliable as well)?
Just my 2 cents.
There are couple of ways to access azure storage services. And I wanted to know from the experts:
Which is the recommended way for accessing azure storage services?
What are the pros/cons of either? (like performance, no of
requests…)
Windows Azure Storage Client Library Class Library
OR
Windows Azure Storage Services REST API
If you are familiar with .NET and feel more comfortable in coding in e.g. C# then the Storage Client Library abstracts all the REST API calls from you and makes your life easier :)
Storage Client Library
Pros - easy of use, .NET, good community support
Cons - none that I'm aware of
The REST interface is excellent and can give you a more native way to write interoperable code at the REST/HTTP layer
Pros - interop e.g. devices, platforms, languages
Cons - complexity IMO
HTH
The other answers are helpful, but on a technical note, there's exactly one way to access Windows Azure storage, and that's via its only API (REST). The .NET storage client library is one of many available libraries you can use to call that API.
This depends on your environment. If you're using .NET, Node, Java, PHP or Python I suggest you take a look on the Windows Azure website since there's an SDK for all these environments, which is much easier than using the REST api (underneath the SDK still uses the REST api):
You don't have to handle the low level REST API
The SDK is built by the Windows Azure team, they have the most knowledge of how to best use the REST API
For the number of requests, most of the time you are in control in both scenarios (batching for table storage, getting multiple messages from queue, ...).
Now, keep in mind that the REST api will always have the new features first, and it can take a while before these are implemented in the SDKs. But still, you can follow the repositories on GitHub to get the newest versions (the 1.7.1 .NET SDK is here while the 'official' release is still 1.7).
If you just want to access your Azure Storage, just download FREE 3rd party application and configure your Azure Storage using "Storage Name" and "Storage Key" and you are good to go. Here is a list of a few applications:
Azure Storage Explorer
CloudXplorer
CloudBerry Azure Storage Explorer
If you want to get your hands dirty and use Azure Storage Client API, here is a full example code.