我有WebAPI項目,需要從移動應用程序獲取圖像並將其寫入文件夾。將圖像寫入文件夾(ASP.NET MVC)
這裏是我的代碼
public class ImageController : ApiController
{
public bool SaveImage(string ImgStr, string ImgName)
{
String path = HttpContext.Current.Server.MapPath("~/Image"); //Path
//Check if directory exist
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path); //Create directory if it doesn't exist
}
string imageName = ImgName + ".jpg";
//set the image path
string imgPath = Path.Combine(path, imageName);
byte[] imageBytes = Convert.FromBase64String(ImgStr);
File.WriteAllBytes(imgPath, imageBytes);
return true;
}
}
這裏是我的網址,我在API選項卡
http://localhost:55341/api/Image?ImgStr={ImgStr}&ImgName={ImgName}
看到我在請求中發送兩個參數。 ImgStr與基地64 sting和ImgName與靜態名稱 - 測試。
但是我有此
{「消息」:「發生錯誤」,「ExceptionMessage」:「輸入是不是一個有效的Base-64字符串,因爲它含有非基部64字符,超過兩個填充字符或填充字符中的非法字符。「,」ExceptionType「:」System.FormatException「,」StackTrace「:」at System.Convert.FromBase64_Decode(Char * startInputPtr,Int32 inputLength,Byte *在System.Convert.FromBase64String(String s)處的System.Convert.FromBase64CharPtr(Char * inputPtr,Int32 inputLength)處的\ r \ n \ trackingAppbackend.Controllers.ImageController.SaveImage(字符串ImgStr,字符串ImgName)在C:\ Users \ nemes \ Documents \ Visual Studio 2017 \ Projects \ trackingappb ackend \ trackingappbackend \ Controllers \ ImageController.cs:line 29 \ r \ n at lambda_method(Closure,Object,Object [])\ r \ n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。在System.Web上的System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance,Object [] arguments)\ r \ n下的c__DisplayClass10.b__9(Object instance,Object [] methodParameters)\ r \ n。 Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2參數,CancellationToken cancellationToken)\ r \ n ---來自之前引發異常的位置的堆棧跟蹤結束--- \ r \ n在System.Runtime.CompilerServices .TaskAwaiter.ThrowForNonSuccess(任務任務)\ r \ n在System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\ r \ n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)\ r \ n ---從以前位置拋出異常的堆棧跟蹤結束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)上的\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務ta sk)\ r \ n在System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\ r \ n ---從前一位置拋出異常的堆棧跟蹤結束--- \ r \ n在System。 Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()「 }
但我發送有效的base64字符串。
哪裏有問題?
我不會傳遞一個圖像作爲一個url參數,有一個依賴於瀏覽器的大小限制。使用post參數更好,它也會讓你解決編碼問題。嘗試一下,看看你是否得到了更好的結果 – Slicksim