2013-02-22 7 views
6

मेरे नियंत्रक है इस कोड में अनुरोध वस्तु में एक अपलोड की गई छवि हो रही:MVC छवि में कनवर्ट Base64 स्ट्रिंग, लेकिन ... System.FormatException

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

    return fileName; 
} 

छवि के मूल्य (कम से कम यह की शुरुआत) लग रहा है इस तरह एक बहुत:

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

हालांकि, वें:

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

मैं निम्नलिखित का उपयोग कर परिवर्तित करने की कोशिश की System.FormatException देता है: "इनपुट मान्य बेस -64 स्ट्रिंग नहीं है क्योंकि इसमें गैर-बेस 64 वर्ण, दो से अधिक पैडिंग वर्ण या पैडिंग वर्णों के बीच एक अवैध चरित्र शामिल है।"

मुझे यह महसूस हो रहा है कि समस्या यह है कि कम से कम स्ट्रिंग की शुरुआत बेस 64 नहीं है, लेकिन सभी के लिए मुझे पता है कि इसमें से कोई भी नहीं है। क्या मुझे इसे डीकोड करने से पहले स्ट्रिंग को पार्स करने की ज़रूरत है? क्या मैं कुछ पूरी तरह से अलग कर रहा हूँ?

उत्तर

9

ऐसा लगता है कि आप बस शुरुआत से "data:image/jpeg;base64," भाग को बाहर निकालने में सक्षम हो सकते हैं। उदाहरण के लिए:

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 
} 
बेशक

आप इस हद तक कम जेपीईजी विशेष बनाना चाहते सकता है, लेकिन मैं कोशिश करता हूँ कि एक बहुत पहले पास के रूप में।

+0

मुझे jpg, gif, png, और bmp को स्वीकार करने की आवश्यकता है, जो मुझे लगता है कि इसे अपने तरीके से संभालने के लिए जांचने के लिए बहुत सारे नहीं हैं (यह मानते हुए)। हालांकि, मैं मदद नहीं कर सकता लेकिन सोचता हूं कि उस छवि को पार्स करने का एक सही तरीका है। पहले 20 या इतने पात्रों में इतने सारे संभावित डिलीमीटर ... यह एक संयोग नहीं हो सकता है। – ESDictor

+0

ठीक है, मुझे लगता है कि 'डेटा का प्रारूप: [सामग्री-प्रकार]; [एन्कोडिंग], [डेटा] 'काफी उचित है ... –

+0

मुझे इसे सोमवार को परीक्षण करने की आवश्यकता है ... यदि यह काम करता है तो मैं चिह्नित करूंगा आपका उत्तर – ESDictor

5

कारण वास्तव में है "डेटा: image/jpeg; बेस 64,", मैं बेस 64 से शुरू होने वाले स्ट्रिंग दूर करने के लिए इस पद्धति का उपयोग

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

यह सबसे छोटा समाधान है का सुझाव देंगे और आप की जरूरत नहीं है जादू तारों का प्रयोग करें, या एक regex लिखें।

+0

यह हेडर की हार्डकोडिंग से कहीं बेहतर है – alga

संबंधित मुद्दे