2010-08-19 22 views
0

SqlConnection conn = new SqlConnection ("Source de données = DDPRO8-WIN7X86 \ SQLEXPRESS; Catalogue initial = mp3bytes; Persist Security Info = True; Sécurité intégrée = true; ID utilisateur =; Password = ; "); SqlCommand cmd = null; SqlParameter param = null; cmd = new SqlCommand ("INSERT INTO mp3_bytes (chansons)" + "Valeurs (@songs)", conn); FileStream fs = null;Transférer le nom de fichier du contrôle de téléchargement de fichier vers le flux de fichiers

string path = fileUpload.FileName; 
    fs = new FileStream(path, FileMode.Open, FileAccess.Read); 

    Byte[] song = new Byte[fs.Length]; 
    fs.Read(song, 0, song.Length); 
    fs.Close(); 
    param = new SqlParameter("@songs", SqlDbType.VarBinary, song.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, song); 
    cmd.Parameters.Add(param); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

où fileUpload est le contrôle de téléchargement de fichiers .. Je suis en train de charger un fichier mp3 .. quand j'exécute ce que je suis en train de fichier n'a pas pu trouver « » comment puis-je passer le nom du fichier téléchargé à fileStream de téléchargement le contrôle du fichier ..

merci ..

Répondre

2

Utilisez fileUpload.PostedFile.FileName également son mieux pour vérifier s'il y a un fichier qui a été téléchargé en utilisant la propriété fileUpload.HasFile. Vous pouvez également se prémunir contre zéro des fichiers de longueur en vérifiant contre fileUpload.PostedFile.ContentLength> 0.

Modifié - vient de réaliser ce que vous faites mal ... Le contenu du fichier téléchargé doit sauvé par vous sur le disque en utilisant la méthode fileUpload.PostedFile.SaveAs. La propriété de nom de fichier ci-dessus vous donnera le nom de fichier sur la machine client mais le fichier n'existera pas sur le serveur. Vous devez l'enregistrer où vous voulez sur le serveur. Par exemple,

var path = Path.Combine(tempDirectory, fileUpload.PostedFile.FileNam); 
fileUpload.PostedFile.SaveAs(path); 

Cela placerait le fichier téléchargé dans le répertoire temp sur le serveur. Vous pouvez également utiliser la fonction "FichierFichier.InputStream" pour lire le contenu du fichier.

fs = new FileStream(path, FileMode.Open, FileAccess.Read); ne fonctionnera jamais car le fichier n'existe pas sur la machine du serveur Web.

Edit: après avoir mis le code exemple Retirez FileStream fs = null; et remplacer

fs = new FileStream(path, FileMode.Open, FileAccess.Read); 

avec

var fs = uploadFile.PostedFile.InputStream; 

et qui devrait faire l'affaire.

+0

J'ai essayé trop .. – Leema

+0

mais je dois stocker un fichier mp3 comme octet [] tableaux à la base de données dans ce cas, comment puis-je faire cela? – Leema

+0

salut thaaaaaanks maintenant cela fonctionne ... – Leema

0

Si vous avez vraiment besoin d'utiliser un FileStream, vous devez définir FileMode sur Créer plutôt qu'ouvrir car vous n'ouvrez pas un fichier, vous en créez un. EDIT: Mais, comme le dit VinayC, SaveAs() fait tout le dur travail pour vous!

EDIT: Il semble que vous essayez d'enregistrer le fichier sur le disque, puis lisez les octets du fichier pour passer à sql. Vous pouvez ignorer cette partie enregistrement/lecture en obtenant simplement FileBytes à partir du contrôle FileUpload.

SqlConnection conn = new SqlConnection("Data Source=DDPRO8-WIN7X86\\SQLEXPRESS;Initial Catalog=mp3bytes;Persist Security Info=True;Integrated security=true; User ID=; Password=;"); 
SqlCommand cmd = null; 
SqlParameter param = null; 
cmd = new SqlCommand(" INSERT INTO mp3_bytes (songs) " + " Values (@songs) ", conn); 

param = new SqlParameter("@songs", SqlDbType.VarBinary, fileUpload.FileBytes.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, fileUpload.FileBytes); 
cmd.Parameters.Add(param); 
conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close();