将base64映像大于1MB保存到SQL Server,图像已损坏

问题描述 投票:-1回答:1

我正在尝试从以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

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

c# sql-server image-uploading
1个回答
0
投票

我经过大量测试后找到了解决方案,并且来自@ 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();
}

这解决了问题,现在可行

© www.soinside.com 2019 - 2024. All rights reserved.