[英]String or binary data would be truncated when uploading file in MVC
該文件只有14kb(14,000字節)。 我已經讀過varbinary(max)
列類型(我正在使用的)只支持8,000個字節。 那是對的嗎? 如何將文件上傳到數據庫?
if (file.ContentLength < (3 * 1048576))
{
// extract only the fielname
var fileName = Path.GetFileName(file.FileName);
using (MemoryStream ms = new MemoryStream())
{
file.InputStream.CopyTo(ms);
byte[] array = ms.GetBuffer();
adj.resumeFile = array;
adj.resumeFileContentType = file.ContentType;
}
}
錯誤:
字符串或二進制數據將被截斷。 該語句已終止。
在此過程中檢查您要插入的其他列。 我會特別檢查ContentType
列,因為這將類似於image/jpeg
,而不僅僅是image或jpeg。
以下是可能的內容類型列表,以便您可以相應地在ContentType列中創建足夠的空間。
varbinary [ ( n | max) ]
Variable-length binary data. n can be a value from 1 through 8,000.
max表示最大存儲大小為2 ^ 31-1個字節。
http://msdn.microsoft.com/en-us/library/ms188362.aspx
那就是2GB。
如果在表定義中將列定義為VARBINARY(MAX)
,則最多應有2 GB的存儲空間。 如果您將最大列大小指定為數字,那么您只能明確要求最多VARBINARY(8000)
。
有關詳細信息,請參閱此問題
AFAIK VARBINARY(MAX)
僅出現在SQL Server 2008中,因此如果您的數據庫在該版本之前預定,則可能需要升級它。
我知道這不是你的問題的答案,但ms.GetBuffer()將獲得可能不是你的數據的確切大小的底層緩沖區。 MemoryStream為寫入分配了額外的空間,您可能正在從未使用的緩沖區中插入額外的字節。 在這里你可以看到GetBuffer()返回一個256字節的數組,即使該文件只有5個字節長:
using (MemoryStream ms = new MemoryStream())
{
using (FileStream fs = File.OpenRead("C:\\t\\hello.txt"))
{
fs.CopyTo(ms);
byte[] results = ms.GetBuffer();
Console.WriteLine("Size: {0}", results.Length); // 256
byte[] justdata = new byte[ms.Length];
Array.Copy(results, justdata, ms.Length);
Console.WriteLine("Size: {0}", justdata.Length); // 5
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.