我正在尝试从以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();
}
这解决了问题,现在可行