我有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