正在将大于 1MB 的 base64 图像保存到 SQL 服务器,图像已损坏

Saving base64 image greater than 1MB to SQL Server, the image is corrupted

我正在尝试从以 Xamarin 表单创建的 IOS 应用程序上传图像,问题是当文件大于 1 MB 时无法从数据库检索图像,错误消息是文件已损坏。 我正在使用 API 将图像保存到数据库(使用 Dapper),下面的代码显示了 base64 字符串的保存。数据字段设置为 nvarchar(max),我认为 2 MB 不应该太大。

byte[] fileData = null;
var pic = System.Web.HttpContext.Current.Request.Files[i];
Image picIn = Image.FromStream(pic.InputStream);
using (var binaryReader = new BinaryReader(pic.InputStream))
{
    fileData = binaryReader.ReadBytes(pic.ContentLength);
}
var file = new UploadedFilesBase64()
{
    FileName = newFileName, // String Containing File Name
    UploadedFile = Convert.ToBase64String(fileData) // The Base64 String
};
using (var cn = new SqlConnection(conn))
{
    cn.Insert(file);
}

如果文件大小小于 1 MB,一切正常,我们会上传可以达到 2 MB 的文件

任何帮助寻找解决方案的人都会很棒

经过大量测试和@i486 和@JeroenMostert 的想法,我找到了解决方案,问题是即使函数存在于 c# 中 fileData = binaryReader.ReadBytes(pic.ContentLength); 成功的正确方法是这样

Encoder myEncoder = Encoder.Quality;
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
using (var memoryStream = new MemoryStream())
{
    picIn.Save(memoryStream, jpgEncoder, myEncoderParameters);
    fileData = memoryStream.ToArray();
}

这解决了问题,现在可以使用了