파일을 읽고 Byte 배열로 변환 한 다음 Base64 문자열로 변환 한 후 다른 콘솔 응용 프로그램으로 보내는 REST 서비스가 있습니다. 이 부분은 작동하지만 동일한 스트림이 애플리케이션에서 수신되면 조작되고 더 이상 유효한 Base64 문자열이 아닙니다. 일부 정크 캐릭터가 스트림에 소개되고 있습니다.
스트림을 다시 Byte로 변환 할 때 수신 된 예외는 다음과 같습니다.
입력이 기본 64가 아닌 문자, 두 개 이상의 채우기 문자 또는 채우기 문자 사이에 공백이 아닌 문자를 포함하므로 유효한 Base-64 문자열이 아닙니다.
서비스 :
[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Json)]
public string ExportToExcel()
{
string filetoexport = "D:\\SomeFile.xls";
byte[] data = File.ReadAllBytes(filetoexport);
var s = Convert.ToBase64String(data);
return s;
}
신청시 :
var client = new RestClient("http://localhost:56877/User/");
var request = new RestRequest("ReadFile/Convert", RestSharp.Method.GET);
request.AddHeader("Accept", "application/Json");
request.AddHeader("Content-Type", "application/Json");
request.OnBeforeDeserialization = resp => {resp.ContentType = "application/Json";};
var result = client.Execute(request);
byte[] d = Convert.FromBase64String(result.Content);
답변
처음에 이미지 데이터에 헤더 정보가 포함되어 있는지 확인하세요.
imageCode = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
이로 인해 위의 오류가 발생합니다.
첫 번째 쉼표를 포함하여 앞의 모든 항목을 제거하기 만하면됩니다.
imageCode = "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
답변
아주 아마도 그것은 수정 된 Base64로, 변환 점점 +
과 /
문자로 변경 -
하고 _
. http://en.wikipedia.org/wiki/Base64#Implementations_and_history 참조
이 경우 다시 변경해야합니다.
string converted = base64String.Replace('-', '+');
converted = converted.Replace('_', '/');
답변
값 앞에 불필요한 문자열 입력을 제거 할 수 있습니다.
string convert = hdnImage.Replace("data:image/png;base64,", String.Empty);
byte[] image64 = Convert.FromBase64String(convert);
답변
업로드 된 이미지의 유형을 모르고 base64
헤더 만 제거하면됩니다 .
var imageParts = model.ImageAsString.Split(',').ToList<string>();
//Exclude the header from base64 by taking second element in List.
byte[] Image = Convert.FromBase64String(imageParts[1]);
답변
문자열을 JSON으로 반환하므로 해당 문자열에는 원시 응답에 여는 따옴표와 닫는 따옴표가 포함됩니다. 따라서 응답은 다음과 같을 것입니다.
"abc123XYZ=="
또는 무엇이든 … Fiddler로 이것을 확인해 볼 수 있습니다.
내 생각 엔 result.Content
따옴표를 포함한 원시 문자열입니다. 이 경우 result.Content
사용하기 전에 역 직렬화해야합니다.
답변
나는 당신이 설명한 것과 비슷한 맥락을 정리했고 같은 오류에 직면했습니다. "
내용의 시작과 끝 부분 을 제거 하고 다음으로 대체 \/
하여 작동하도록 관리했습니다./
.
다음은 코드 조각입니다.
var result = client.Execute(request);
var response = result.Content
.Substring(1, result.Content.Length - 2)
.Replace(@"\/","/");
byte[] d = Convert.FromBase64String(response);
대안으로 응답 형식에 XML 사용을 고려할 수 있습니다.
[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Xml)]
public string ExportToExcel() { //... }
클라이언트 측에서 :
request.AddHeader("Accept", "application/xml");
request.AddHeader("Content-Type", "application/xml");
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/xml"; };
var result = client.Execute(request);
var doc = new System.Xml.XmlDocument();
doc.LoadXml(result.Content);
var xml = doc.InnerText;
byte[] d = Convert.FromBase64String(xml);
답변
var spl = item.Split('/')[1];
var format =spl.Split(';')[0];
stringconvert=item.Replace($"data:image/{format};base64,",String.Empty);
