2016-06-20 3 views
0

Ich versuche, Bilder von Mitarbeitern aus einer Datenbank zu exportieren, sie auf meinem Computer zu speichern und sie dann in jedem Mitarbeiter in Salesforce hochzuladen. Mein Problem ist, dass es ein Problem mit der Art gibt, wie ich die Dateien von der Datenbank speichere. Wenn ich die Bilddatei aus der Datenbank in Salesforce hochladen möchte, wird mir mitgeteilt, dass Ihre Datei zu diesem Zeitpunkt nicht hochgeladen werden kann. Bitte versuchen Sie es in ein paar Minuten noch einmal. Wenn ich jedoch ein einzelnes Bild per E-Mail an mich selbst sende, lade es herunter und lade dieses Bild hoch, es funktioniert. (Ich habe versucht, das massenweise zu tun; es hat nicht funktioniert). Ich bin zu dem Schluss gekommen, dass das Problem mit dem Code zu tun haben könnte. Das Foto wird als varbinary(max) gespeichert und als beide .png und .jpeg Typen gespeichert und aus der Datenbank unter Verwendung einer Variation von MSDN ‚s-Code extrahiert:C# Wie speichere ich eine binäre Bilddatei korrekt aus der Datenbank?

SqlConnection connection = new SqlConnection(connectionString); 
    SqlCommand command = new SqlCommand(queryString, connection); 

    connection.Open(); 
    SqlDataReader myReader = command.ExecuteReader(CommandBehavior.SequentialAccess); 

    while (myReader.Read()) 
    { 
     filePath = @"C:\Users\npredey\Documents\Photos_from_database\" + myReader["first_name"] + '_' + myReader["last_name"]; 
     FileStream fs = new FileStream(filePath + ".gif", FileMode.OpenOrCreate, FileAccess.Write); // creates a new file for output 

     bw = new BinaryWriter(fs); 

     startIndex = 0; 
     retval = myReader.GetBytes(3, startIndex, outbyte, 0, bufferSize); 

     while (retval == bufferSize) 
     { 
     bw.Write(outbyte); 
     bw.Flush(); 

     startIndex += bufferSize; 
     retval = myReader.GetBytes(3, startIndex, outbyte, 0, bufferSize); 
     } 

     bw.Write(outbyte, 0, (int)retval - 1); 
     bw.Flush(); 

     bw.Close(); 
     fs.Close(); 
    } 
    myReader.Close(); 
    connection.Close(); 

Könnte es mit ein Problem sein, wie die Datei gespeichert wird, wo es wäre nicht in der Lage hochgeladen zu werden? Ich habe die Datei mit allen drei akzeptablen Erweiterungen gespeichert (.gif, .jpg, .png) und keiner von ihnen hat funktioniert.

+0

"Das Foto wird als varbinary (max) gespeichert" - aber mit welchem ​​Format? – enkryptor

+0

@enkryptor bearbeitet. –

+1

Sieht so aus, als würden Sie Ihre Bilddaten in einer 'Filestream'-Spalte speichern, gut gemacht :) Wenn Sie die Serveroption' Enable FILESTREAM für Datei-I/O-Streamingzugriff 'aktiviert haben, können Sie direkt über Windows Explorer auf die Daten zugreifen. Das könnte dir Kopfschmerzen ersparen. –

Antwort

1

Beim letzten Schreibvorgang sollten Sie nicht 1 von retval subtrahieren.

retval enthält die Anzahl der gelesenen Bytes. Der dritte Parameter von BinaryWriter.Write ist die Anzahl der zu schreibenden Bytes.

Da Sie alle Bytes schreiben möchten, sollten Sie nur retval anstelle von retval - 1 übergeben, die das letzte Byte aus beinign geschrieben behalten würde.

+1

Das ist was behoben! Kannst du erklären, warum das so ist? –

+1

@NickPredey Ich bearbeite die Antwort mit der Erklärung – Shago

Verwandte Themen