C#解决WebAPI图片上传414错误:Base64编码与路径优化

需积分: 13 1 下载量 73 浏览量 更新于2024-08-28 收藏 339KB DOCX 举报
在C#中,关于"EntCodeWebAPI图片上传接口.docx"文档,主要讨论了一个图片上传功能在.NET Code API接口中遇到的问题及其解决方案。问题在于前端通过HTTP请求发送Base64编码的图片时,由于URL过长导致414 UndocumentedError: Request-URITooLong错误。为了解决这个问题,作者建议使用集合或分块(sead)的方式进行前端传输,避免URL过长。 1. **前端请求流程与问题**: 前端通过HTTP POST请求将图片的Base64编码作为参数传递给API。然而,由于Base64编码后的字符串长度可能非常大,直接作为URL的一部分会导致URL长度超过服务器支持的最大限制。这触发了414请求URI过长的错误。 2. **解决方案:** - 使用分片或集合来分割Base64编码,将其拆分成多个小部分分别发送。 - 前端代码示例中的`UpLoadPhoto`参数后面附带的是服务器上的图片存储路径。这里作者提到,需要将Base64字符串进一步处理,例如分解成`string[] str = base64Str.Split(',')`,然后逐个处理每个子字符串。 3. **接口层实现**: 在接口层的`BaseResultModel UpLoadPhoto(string base64Str, string path)`方法中,关键步骤包括: - 将Base64字符串转换为字节数组`byte[] imageBytes = Convert.FromBase64String(str[1])` - 创建一个MemoryStream对象来存储图像数据,并写入字节数组`memoryStream.Write(imageBytes, 0, imageBytes.Length)` - 构建上传到服务器的完整路径`imagesurl2 = "." + path + imgName + "." + hz` - 保存图片到服务器指定路径`image.Save(imagesurl2, System.Drawing.Imaging.ImageFormat.Jpeg)` - 设置返回结果,如code为200表示成功,包含返回给前端的访问图片的URL`imgurls = path + imgName + "." + hz` 总结来说,该文档介绍了在.NET Code API接口中处理图片上传过程中遇到的URL过长问题,并提供了解决方案,即通过拆分Base64编码、使用内存流和控制URL长度来确保图片上传的成功。同时,代码中展示了如何在服务器端接收并存储图片,以及如何构建返回给前端的访问链接。开发者在实现类似功能时,应考虑到这类常见的HTTP请求限制,以确保API的稳定性和性能。