Les données string ou binarys sont tronquées lors du téléchargement de file dans MVC

Le file est seulement 14kb (14 000 octets). J'ai lu que le type de colonne varbinary(max) (que j'utilise) ne supporte que 8 000 octets. Est-ce exact? Comment puis-je download mon file dans la database?

 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; } } 

L'erreur:

Chaîne ou des données binarys seront tronquées. La déclaration a été résiliée.

Vérifiez vos autres colonnes que vous insérez dans pendant ce process. Je voudrais surtout vérifier la colonne ContentType car ce sera quelque chose comme image/jpeg et pas simplement image ou jpeg.

Voici une list des types de contenu possibles afin que vous puissiez créer suffisamment d'espace dans votre colonne ContentType en conséquence.

 varbinary [ ( n | max) ] Variable-length binary data. n can be a value from 1 through 8,000. 

max indique que la taille de stockage maximale est de 2 ^ 31-1 octets.

http://msdn.microsoft.com/en-us/library/ms188362.aspx

Donc c'est 2GB.

Si vous avez défini votre colonne comme VARBINARY(MAX) dans la définition de table, vous devriez avoir jusqu'à 2 Go d'espace de stockage. Si vous avez spécifié la taille maximale de la colonne sous la forme d'un nombre, vous pouvez uniquement requestr explicitement jusqu'à VARBINARY(8000) .

Voir cette question pour plus de détails

AFAIK VARBINARY(MAX) n'apparaît que dans SQL Server 2008, donc si votre database est antérieure à cette version, vous devrez peut-être la mettre à niveau.

Je sais que ce n'est pas la réponse à votre question, mais ms.GetBuffer () obtiendra le tampon sous-jacent qui n'est probablement pas la taille exacte de vos données. Le MemoryStream alloue une place supplémentaire pour l'écriture et vous insérez probablement des octets supplémentaires à partir du tampon inutilisé. Ici vous pouvez voir que GetBuffer () returnne un tableau de 256 octets même si le file n'a que 5 octets:

 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 } }