I am using the Google Charts API in my .NET application and I would like to programmatically save the chart rendered as an image by passing the chat URI in an AJAX request to the server.
The problem is that the URI of the chart is a data URI scheme so it looks like this: data:image/png;base64,abcdef...
I tried to request this URI with the HttpClient, WebClient and WebRequest classes but all of these launched an exception saying that the URI prefix is not recognized or not handled...
Does anyone knows wich library I can use to request this kind of URI?
By exploring the data URI scheme by myself, I finally understood that I didn't need to send a request to retrieve the image, as the bytes were already in the URI.
I managed to decode the base 64 string to an 8 bit stream and create the image :)
Below is a short example of my working code :)
// The data URI to the image
String imageLink = "data:image/png;base64,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"
// Split the string to escape the real data
var b64 = imageLink.Split(",".ToCharArray(), 2);
// Convert the base 64 String to byte array
byte[] byteArray = Convert.FromBase64String(b64[1]);
// Open a stream from the byte array
MemoryStream imgStream = new MemoryStream(byteArray);
// Generate the image from the stream
Image img = Image.FromStream(imgStream);
// Save the image
img.save("C:\\Images\\image.png");
Related
I'm submitting a trusted url path to my webapi and then trying to upload the image to azure-storage. The uri I have to upload includes blob:https://localhost/... Which points to a image stored locally. I need to read this stream however I'm receiving an exception on first line of code:
"The URI prefix is not recognized."
var req = System.Net.WebRequest.Create("blob:https://localhost:5001/2b28e86c-fef1-482e-ae16-12466e6f729f");
using (var stream = req.GetResponse().GetResponseStream())
{
containerClient.UploadBlob(image.guid.ToString(), stream);
}
I did a bunch more searching and discovered that only the browser can access blob: files. Ended up switching back to FormData.
I want to fetch remote images and do some image transformation specifically an overlay over an image with cloudinary. But cloudinary only supports 64base safe urls to overlay images.
Lets say I have this following remote image URL.
https://scontent.xx.fbcdn.net/v/t1.0-9/15665479_1260320054027269_4201232212927955955_n.jpg?oh=ee01f2ec47b2e972bc12f99d988db241&oe=5946A159
How can I encode it to a 64base url? I have been through many SO questions related to the question but none of them were helped me to solve the issue.
In case you need to encode both URL and Image (may not be what you need, but might be useful sometime)
string url = "https://scontent.xx.fbcdn.net/v/t1.0-9/15665479_1260320054027269_4201232212927955955_n.jpg?oh=ee01f2ec47b2e972bc12f99d988db241&oe=5946A159";
string encodedUrl = Convert.ToBase64String(Encoding.Default.GetBytes(url));
using (var client = new WebClient())
{
byte[] dataBytes = client.DownloadData(new Uri(url));
string encodedFileAsBase64 = Convert.ToBase64String(dataBytes);
}
I want to send a normal text file from my VisualStudio C# Windows Forms Application via "Post" to an Url with a WebClient.
my code:
using(WebClient w = new WebClient())
{
w.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = w.UploadString(#"http://xxx/api/test", "Post", #"C:\Temp\T.txt");
}
This is what I found so far. When I run this code the post method in my web project gets hit but the param is null (which is understandable since its data type is a string but it is also null when I change the file address to a simple string like "test").
So my real problem is that I canĀ“t send my text data to my URL.
First, your ContentType should be "application/text" not "application/x-www-form-urlencoded".
Second, this method defaults to POST for HTTP/HTTPS so use the overload that takes two string parameters UploadString("destination Url", "data"). If you just must use the three parameter overload, the method should be "POST" not "Post".
This method does not read the file for you, you will need to add code to read the contents of your file into a string, then pass that string to the data parameter of the UploadString method.
I probably should add that, in the recieving api you will read the data from the Request.InputStream object. As with any stream you will read it into a byte array and need to encode it back to a string. You must use the same encoding that was used to read the file into a string.
The stream InputStream is a one-way readonly stream, so you will need to read it in it's entirety into a byte array before encoding back to a string.
I have c# client and c# server (mvc4 api controller) and I want to transfer image via json.
I write on the client:
var memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
var baseStr64 = Convert.ToBase64String(memoryStream.ToArray());
response.Image = baseStr64;
(new JavaScriptSerializer).Serialize(response);
...Sending
Without image controller gets the request class normal, but with image base64 string field I have a null parameter in controller. Then I noticed that output json fails in online json validators on this base64 field.
My output json can be found here: http://pastebin.com/wnAJpZGV
How to transmit image correctly?
It is possible that the Json string is too big. The PasteBin example you showed was over 200K in length. Check this StackOverflow article on how you might be able to fix the problem:
Can I set an unlimited length for maxJsonLength in web.config?
I need to download a Cab file from a Url into a stream.
using (WebClient client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
byte[] fileContents = client.DownloadData("http://localhost/sites/hfsc/FormServerTemplates/HfscInspectionForm.xsn");
using (MemoryStream ms = new MemoryStream(fileContents))
{
FormTemplate = formExtractor.ExtractFormTemplateComponent(ms, "template.xml");
}
}
This is fairly straight forward, however my cab extractor (CabLib) is throwing an exception that it's not a valid cabinet.
I was previously using a SharePoint call to get the byte stream and that was returning 30942 bytes. The stream I get through that method worked correctly with CabLib. The stream I get with the WebClient returns only 28087 bytes.
I have noticed that the responce header content-type is coming back as text/html; charset=utf-8
I'm not too sure why but I think it's what's affecting the data I get back.
I beleive the problem is that SharePoint is passing the xsn to the Forms Server to render as an info path form in HTML for you. You need to stop this from happening. You can do this by adding some query string parameters to the URL request.
These can be found at:
http://msdn.microsoft.com/en-us/library/ms772417.aspx
I suggest you use NoRedirect=true