【发布时间】:2018-08-14 10:04:26
【问题描述】:
我正在尝试从以 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 的文件
任何关于寻找解决方案的帮助都会很棒
【问题讨论】:
-
无需将图像转换为base64。使用
VARBINARY(max)并上传二进制数据。 -
VARBINARY(Max) 也会出现同样的情况,我们使用的是 Sql Server 2014,我尝试了几个选项,都一样。
-
数据库不会说“文件已损坏”,它不关心列中的内容。检查表中的实际内容 (
DATALENGTH) 以及如何检索。您假设 stores 的代码是问题所在。如果您正在在这段确切的代码中收到错误消息,那么您的 Web 服务器或 HTTP 连接是问题所在,而不是您的 SQL Server。 -
在 SQL 中为
VARBINARY(max)列使用UPDATE或INSERT。从 C# 端发送byte[]对象作为SqlCommand类型SqlDbType.Image的参数。有用。 PS:UploadedFilesBase64是什么? -
谢谢各位,我一直在逐行检查代码并检查每个阶段的实际图像,文件被捕获 'var pic = System.Web.HttpContext.Current.Request.Files[一世];'很好,然后从流中读取 'Image picIn = Image.FromStream(pic.InputStream);'图像仍然很好,下一行是问题仍然存在的地方,'fileData = binaryReader.ReadBytes(pic.ContentLength);'此时我尝试对其进行解码并且图像已损坏,我已经从问题中消除了 SQL,这纯粹是一个 c# 问题我正在使用 VS 2017 Enterprise
标签: c# sql-server image-uploading