2016-03-21 16 views
0

İstekleri alan, Oracle Veritabanından veri toplayan ve bilgileri JSON üzerinden geri gönderen bir ASP.NET web hizmeti yazdım. Veriler Base64'te döndürülmesi gereken bir görüntü dosyası (jpg) içerir.C# ile JSON kullanarak temel Base64 verilerini alma

Görüntüyü döndürmeye çalışana kadar her şey iyi gidiyordu.

Oracle saklı yordam aşağıdaki gibidir: Benim kod olmasıdır Ben içinden takip ettik ve öngörülebilir verileri (base64 dize)

döndü görüyorum,

create or replace PROCEDURE check_data(
<in parameters here>, 
outpixblob  OUT BLOB); 

fileptr := utl_file.fopen('PIX_DIR', vFilename, 'rb', 32760); 
utl_file.get_raw(fileptr, outpixblob); 

Bu iyi iş gibi görünüyor (aktarılan)

Şimdi, C# kodu:

conn.Open(); 
      var cmd = new OracleCommand 
      { 
       Connection = conn, 
       CommandText = "CHECK_DATA", 
       CommandType = CommandType.StoredProcedure, 
      }; 
      //lots of parameter settings here, just showing the pertinent one 
      //cmd.Parameters.Add("outpixblob", OracleDbType.Blob).Direction = ParameterDirection.Output; 
      var dr = cmd.ExecuteNonQuery(); 

      var blob = (OracleBlob) cmd.Parameters["outpixblob"].Value; 

      var buffer = new byte[blob.Length]; 
      blob.BeginChunkWrite(); 
      blob.Write(buffer, 0, (int)blob.Length); 
      blob.EndChunkWrite(); 
      string photoString = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length); 


      result = new VisitorCheckResult 
      { 
       ... 
       Photo  =  photoString, 

      }; 

Açıkçası yine temel olmayan kodunu kesip, ama ben ne yapıyorum düşüncesi olduğuna inanıyoruz.

Photocring'in sonucu, Oracle sproc hata ayıkladığında gördüğüm değerler değil; bunun yerine, tekrar tekrar '\ u0000' uzun bir dizedir.

Eminim ki eksik bir şey var, ama bunun n00b olması ne olduğunu göremiyorum.

Yardım!

+0

Bu photoString '64F'ye değil, UTF8'e kodlanan görüntüdür. –

+0

Bunun yerine hangi kodlamayı kullanmalıyım? – Fletchius

+0

System.Convert.FromBase64String() veya System.Convert.FromBase64CharArray() yöntemini denediniz mi? – JYA

cevap

1

Tamam, cevabı bulundu. Çıktı, arabellek yazacak yanlış bir fikir ile write() yöntemini kullanıyordum. Write() yöntemi, verileri Oracle BLOB nesnesine yazar. Read() Yöntemini kullanmak için ona ihtiyacım vardı. Bu kez

oldu ve ben base64 için bayt [] dizi dönüştürülen sonra:

result.Photo = Convert.ToBase64String(buffer); 

sonuç güzel çıktı.

Tüm özellikle ve dbc sayesinde, yanıtlarımın neler olup bittiğini anlamasına yardımcı oldu.