2013-02-22 9 views
6

Benim denetleyicisi olan bu kodda istek nesnesindeki yüklenen bir görüntü alma:MVC Image Base64 dize dönüştürme, ama ... System.FormatException

[HttpPost] 
public string Upload() 
{ 
    string fileName = Request.Form["FileName"]; 
    string description = Request.Form["Description"]; 
    string image = Request.Form["Image"]; 

    return fileName; 
} 

görüntünün değeri (bunun en azından başlangıcı

byte[] bImage = Convert.FromBase64String(image); 

Ancak inci:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/... 

aşağıdaki kullanarak dönüştürmek için çalıştı:) bu çok benziyordu System.FormatException değerini verir: "Giriş, 64 olmayan bir karakter, ikiden fazla dolgu karakteri veya dolgu karakterleri arasında geçersiz bir karakter içerdiğinden geçerli bir Base-64 dizesi değildir."

Sorunun en azından dize başlangıcının base64 olmadığına, ancak bunların hiçbirinin bilmediğine inanıyorum. Kod çözmeden önce dizeyi ayrıştırmam gerekiyor mu? Tamamen farklı bir şey eksik miyim?

cevap

9

belki sadece "data:image/jpeg;base64," bölümünün başından çıkmasını sağlayabilirsiniz. Örneğin: Elbette

const string ExpectedImagePrefix = "data:image/jpeg;base64,"; 
... 
if (image.StartsWith(ExpectedImagePrefix)) 
{ 
    string base64 = image.Substring(ExpectedImagePrefix.Length); 
    byte[] data = Convert.FromBase64String(base64); 
    // Use the data 
} 
else 
{ 
    // Not in the expected format 
} 

bu biraz daha az JPEG özgü yapmak isteyebilirsiniz, ama ilk geçişte olarak bu çalışacaktı.

+0

Jpg, gif, png ve bmp'yi kabul etmem gerekiyor. Ancak, yardım edemiyorum ama bu görüntüyü ayrıştırmanın doğru bir yolu olduğunu düşünün. O kadar ilk sınırlayıcıyı bu kadar 20 karakterde ... ... tesadüf olamaz. – ESDictor

+0

Eh, ben veri biçimi [içerik türü]; [kodlama], [veri] 'oldukça makul olduğunu düşünüyorum ... –

+0

Ben sadece Pazartesi günü test etmeliyim ... eğer işe yararsa ben işaretleyeceğim cevabınız – ESDictor

5

nedeni gerçekten "veriler: image/jpeg; base64," Ben

var base64Content = image.Split(',')[1]; 
byte[] bImage = Convert.FromBase64String(base64Content); 

Bu kısa çözümdür base64 başlayarak dize çıkarmak için bu yöntemi kullanarak önermek ve size gerekmez sihirli dizeleri kullanın veya bir normal ifade yazın.

+0

Başlığın sabit kodundan çok daha iyi – alga