Forum

RFC 1867 httpUpload...
 
Bildirimler
Hepsini Temizle

RFC 1867 httpUpload Metodu Sorunu

8 Yazılar
2 Üyeler
0 Likes
395 Görüntüleme
(@MennanSevim)
Gönderiler: 89
Estimable Member
Konu başlatıcı
 

MMS oluşturmak için Turkcell apisine 2 dosya upload ediyorum 1 png ve 1 ses.MMSin oluşuyor fakat ses dosyam çalışmıyor.Karşı tarafa ulaşmadığını belirtiyorlar.Aynı kodlarla 4 adet resim gönderimi yaptığımda 4 resim de başarılı bir şekilde ulaşıyor.En son bir sistem sorumlusuyla görüştüm ve en son gönderimde boundary eklenmemiş o yüzden ses dosyanızı göremiyoruz dedi.Kontrol ettiğimde sorun göremedim.Ama şu kafama takılıyor,resim gönderimlerinde sorun olmuyor fakat ses gönderimlerimi görmüyor.

 

Kodumda gözden kaçırdığım bir nokta varsa veya denemem gereken bir yöntem varsa uyarılarınızı dinliyor olacağım

 

KOD:

 

 public byte[] UploadFiles(string address, IEnumerable<UploadFile> files, NameValueCollection values)

    {
       
var request = HttpWebRequest.Create(address);
        request
.Method = "POST";
       
var boundary = "---------------------------5646198165461";
        sendInfoLog
(request.Method, "", "");
        sendInfoLog
(boundary,"","");
        sendInfoLog
(request.ContentType, "", "");
        boundary
= "--" + boundary;

       
try
       
{
            using
(var requestStream = request.GetRequestStream())
           
{
               
// Write the values
               
foreach (string name in values.Keys)
               
{
                   
var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
                    requestStream
.Write(buffer, 0, buffer.Length);
                    buffer
= Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
                    requestStream
.Write(buffer, 0, buffer.Length);
                    buffer
= Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
                    requestStream
.Write(buffer, 0, buffer.Length);
                    sendInfoLog
(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}\n{2}",name, Environment.NewLine, values[name] + Environment.NewLine),"","");
               
}

               
// Write the files
               
int k = 0;

               
foreach (var file in files)
               
{
                   
int c = 0;
                   
foreach (var count in file.ContentType)
                   
{
                       
var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
                        requestStream
.Write(buffer, 0, buffer.Length);
                        buffer
= Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name[c], file.Filename[c], Environment.NewLine));
                        sendInfoLog
(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name[c], file.Filename[c], Environment.NewLine), "", "");
                        requestStream
.Write(buffer, 0, buffer.Length);
                        buffer
= Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType[c], Environment.NewLine));
                        sendInfoLog
(string.Format("Content-Type: {0}{1}{1}", file.ContentType[c], Environment.NewLine), "", "");
                        requestStream
.Write(buffer, 0, buffer.Length);

                       
CopyTo(file.Stream, requestStream);

                        buffer
= Encoding.ASCII.GetBytes(Environment.NewLine);
                        requestStream
.Write(buffer, 0, buffer.Length);

                       
++c;
                   
}
                   
++k;
               
}

               
var boundaryBuffer = Encoding.ASCII.GetBytes(boundary+"--\n");
                requestStream
.Write(boundaryBuffer, 0, boundaryBuffer.Length);

           
}

       
}
       
catch (Exception x)
       
{
            sendErrorLog
("Uploading Error","",x.Message,new Exception(""));
           
Console.Write("Error >" + x.Message);
       
}
        using
(var response = request.GetResponse())
        using
(var responseStream = response.GetResponseStream())
        using
(var stream = new MemoryStream())
       
{
           
CopyTo(responseStream, stream);
           
return stream.ToArray();
       
}
   
}

   
public static void CopyTo(Stream input, Stream output)
   
{
       
byte[] buffer = new byte[16 * 1024];
       
int bytesRead;

       
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
       
{
            output
.Write(buffer, 0, bytesRead);
       
}
   
}

   
public class UploadFile
   
{
       
public UploadFile(Stream stream)
       
{
           
Name = new List<string>();
           
ContentType = new List<string>();
           
Filename = new List<string>();
           
this.Stream = stream;
       
}
       
public readonly List<string> Name;
       
public readonly List<string> Filename;
       
public readonly List<string> ContentType;
       
public readonly Stream Stream;
   
}


     
public string CreateMMS(List<List<string>> Pathes,string name, string framecount,  List<string> Frame_N_Text,List<string> Frame_N_Duration, List<List<string>> ContentType, List<List<string>> Names,string ProcessType)
     
{  
     
//return ">>name"+name+"count="+" "+framecount+"text"+Frame_N_Text[0]+" "+Frame_N_Duration[0];

       
List<UploadFile> ufs = new List<UploadFile>();
       
int N=1;


       
try
       
{          
           
for (int i = 0; i < Names.Count; ++i)
           
{

               
for (int j = 0; j < ContentType[i].Count; j++)
               
{
                   
FileStream stream = File.Open(Pathes[i][j], FileMode.Open);
                   
UploadFile uf = new UploadFile(stream);
                    uf
.ContentType.Add(ContentType[i][j]);
                    uf
.Name.Add(Names[i][j]);
                    uf
.Filename.Add(Pathes[i][j]);
                    ufs
.Add(uf);
               
}

               
}

           
NameValueCollection FrameValues = new NameValueCollection();
           
FrameValues.Add("token", Token);
           
FrameValues.Add("name", name);
           
FrameValues.Add("frame_count",framecount);
           
int loop = 0;

           
int forloop = Frame_N_Text.Count;
           
if (ProcessType == "4")
           
{
               forloop
=forloop/2;
           
}
           
for (int i = 0; i < forloop; i++)
           
{
               
FrameValues.Add("frame_" + N + "_text", Frame_N_Text[i]);
                N
++;
           
}

            N
= 1;
           
for (int i = 0; i < forloop; i++)
           
{
               
FrameValues.Add("frame_" + N + "_duration", Frame_N_Duration[i]);
                N
++;
           
}

       
byte[] RetMMSID = UploadFiles("https://api.xxx.xxx.com/mms.xml", ufs, FrameValues);



           
for (int i = 0; i < Names.Count; ++i)
           
{
                ufs
[i].Stream.Close();
           
}


           
string RetVal = System.Text.ASCIIEncoding.ASCII.GetString(RetMMSID);
           
return RetVal;

       
}


       
catch (Exception ex)
       
{

           
return "Uploading Error"+ex.Message;
       
}

   
}

 

 

 
Gönderildi : 03/06/2011 18:11

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Merhaba,

CreateMMS methodunuz tam olarak ne yapıyor? neyin kod içinde çağrıldığı görünmüyor.

Ayrıca ,

var boundary = "---------------------------5646198165461";
.
.
.      
boundary = "--" + boundary;

Burada farklı bir boundary kullanmak size yardımcı olacak bir şey olacaktır.Ayrıca boundary içinde sizin POST verinizi bulamayacak bir string değer olarak ayarlanmıştır.Çünkü, ses dosyaları oldukça büyük dosyalardır ve string ses dosyanızın verisi içinde bulunacaktır.Ek olarak boundary olarak göndermenin en iyi yolu MD5Sum dosylarını göndermek olacaktır.

 

Son olarak;

buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType[c], Environment.NewLine));

 

Burada ses dosyasının doğru bir şekilde gönderilmesi için ses dosyanızın içerik tipini kontrol ettiniz mi?

 

Saygılar,

 
Gönderildi : 06/06/2011 12:23

(@MennanSevim)
Gönderiler: 89
Estimable Member
Konu başlatıcı
 

Merhaba,

CreateMMS methodunuz tam olarak ne yapıyor? neyin kod içinde çağrıldığı görünmüyor.

Ayrıca ,

var boundary = "---------------------------5646198165461";
.
.
.      
boundary = "--" + boundary;

Burada farklı bir boundary kullanmak size yardımcı olacak bir şey olacaktır.Ayrıca boundary içinde sizin POST verinizi bulamayacak bir string değer olarak ayarlanmıştır.Çünkü, ses dosyaları oldukça büyük dosyalardır ve string ses dosyanızın verisi içinde bulunacaktır.Ek olarak boundary olarak göndermenin en iyi yolu MD5Sum dosylarını göndermek olacaktır.

 

Son olarak;

buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType[c], Environment.NewLine));

 

Burada ses dosyasının doğru bir şekilde gönderilmesi için ses dosyanızın içerik tipini kontrol ettiniz mi?

 

Saygılar,

 

Öncelikle ilgilendiğiniz için teşekkür ederim.

 Biraz karışık bir durum farkındayım ama sorunu iyi analiz edebilmeniz için şöyle açıklayayım.Benim sorunum muhtemelen boundary sorunu.4 5 resimden oluşan bir mms oluşturduğumda dahi hiçbir sorun olmadan gönderimimi gerçekleştirebiliyorum.Ama söylediğiniz gibi ses dosyam çok uzun ama datayı post ettiğim kurum ses dosyasının boundary tagı kapatılmamış görünüyor diyo.Oysa resimleri çok rahat görebiliyolar aynı kodla.

 

Ayrıca Son sorunuz ile ilgili içerik tipi sound/amr olarak gönderiyorum.Bir amr dosyası çünkü.Tam olarak anlayamadım galiba orayı.Bir de MD5Sum konusunu araştırayım yapıyı çok fazla değiştirmeyecektir umarım

 

BİLGİ: 

 CreateMMS : Oluşturacağım mmsin özelliklerini barındırıyor.Şöyle ki :

Pathes : Her bir dosyanın adresi

name : MMS başlığı

frame_count : MMSin kaç frameden oluştuğu (4 resimli bir mms mesela)

frame_n_text : Her bir resim yada sese ait yazı bilgisi

frame_n_duration: Her bir frame'in gösterim süresi

Content_type : Datanın türü (image/gif) 

Names : Data tür ve sıra ismini tutan text (frame_N_visual,frame_N_audio)

ProcessType : MMSin oluşturulma türü (SES&RESİM&TEXT yada RESİM&TEXT) gibi.

 

 

 
Gönderildi : 06/06/2011 13:22

(@MennanSevim)
Gönderiler: 89
Estimable Member
Konu başlatıcı
 

Örnek Bir Post SES VE RESİM İşlemim : (Ses ve resim 1 frame olarak kabul ediliyor)

 

POST /test-upload.php HTTP/1.1

Content-Type: multipart/form-data; 

boundary=----5646198165461

Host: xxx.xx.com

Content-Length: 44266Expect: 100-continue

HTTP/1.1 100 Continue

------5646198165461

Content-Disposition: form-data; name="token"

C8DBDC2E52E9910148D13FC155A6C7CF

------5646198165461

Content-Disposition: form-data;name="name"

Test

------5646198165461

Content-Disposition: form-data; name="frame_count"

1

------5646198165461

Content-Disposition: form-data; name="frame_1_text"

Test

------5646198165461

Content-Disposition: form-data; name="frame_1_duration"

5

------5646198165461

Content-Disposition: form-data; name="frame_1_visual"; filename="C:\Inetpub\vhost\xx.xx.com\MMSuploads\file_35000_ID=692\test.gif"

Content-Type: image/gif

GIF89a%.%.....e4........k..s.....W..............w.....J........t.....s..u.....Y...p............|C..............]....................M...........a.............y?..l.q=.................|.....k.....}........d...................}

O.....P..s.....V...........Y..Y...........z..........s8....................g..r.......o<..X....................{..............E..y..H...................sC...........x...........m..J........c..j..}...........h.....[.

{@.....y..m...........s..z.......................R....................k..O..X..e..Q........x..`..............E.....m....................W......................................J.....c....r?..

{........s....q:[email protected]..\.....c..^.....Z..I..i..h..z.c3..n........s...........B........{........z...............!.....v.,....%.%........H......*\..`.M\. .........H!.....-

&.....&........;".f9)..0=......f.... .....,Y.....K..v"...E.........#.M...DD...=>....../..J.rQ1.&...

:....^..-;.aO..\..S.. .|.2...iV.&[email protected]..\.d..!.@.;.....T.4CT....Cc.][email protected].=.t..............".

?..H.e..+.2."./......s5c..>...3F,.3P.........+Z.@

5...C..0..5.......r.-...C...1.84..C!d$..B.`.......-.p...nh.I.n..L.:.I...(4L(QtC.%Ux....<3G. z..$.4.N)..r.]...E.".PE'.....Z.x.5.......c.#F..P0.....T...=.(..3

(\YL.!..I$.p...c.s.AG...4.L..)......Tr.... A............(.......C)O@1.

(.....,1...."H.O!....<..=....'.4sC.qH.......#.|C@4..1.%.0!......+I...*'.......G..X1..

..............O..L.D\..)H........%...... ...y`...ep`.!..%..

(.D.?H#..y8B.$.l...A4+.09<......A..xR.7R...Tj..t.yl.u#...M........#.8.4..!S..5Awl.A+.<......}. ..C..o..7Bw.`."}.....G...;

------5646198165461

Content-Disposition: form-data; name="frame_1_audio"; filename="C:\Inetpub\vhost\xx.xx.com\MMSuploads\file_35000_ID=692\audio.amr"

Content-Type: sound/amr

#!AMR

<....fx.........................<.........

......

......

Uzun...

Bir... 

Data...

....

...

------5646198165461--

HTTP/1.1 200 OKDate: Fri, 03 Jun 2011 07:31:13 

GMTServer: Apache/2.2.14 (Ubuntu) PHP/5.3.2-1ubuntu4.9 with Suhosin-Patch mod_wsgi/2.8 Python/2.6.5X-Powered-By: PHP/5.3.2-1ubuntu4.9Vary: Accept-Encoding

Content-Length: 0

Content-Type: text/htmlX-Pad: avoid browser bug 

 
Gönderildi : 06/06/2011 13:41

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Merhaba,

İçerik türünüz tam olarak  "sound/AMR" olarak mı ayarlanmış?Bence ,burada ihtiyacınız olan sizin "audio/AMR"  olmalıdır.Bence zaten MIME tipi olarak sound/.... diye olacağını sanmıyorum

Ayrıca şunları biliyormusunuz?

1- MMS protokolü bu içerik tipini kabul ediyor mu?

2- sunucu bu içerik tanıyorsa ve / veya karşı tarafta bir uyarı ve ya problem oluşuyor mu?

Saygılar,

 
Gönderildi : 06/06/2011 19:24

(@MennanSevim)
Gönderiler: 89
Estimable Member
Konu başlatıcı
 

Merhaba,

İçerik türünüz tam olarak  "sound/AMR" olarak mı ayarlanmış?Bence ,burada ihtiyacınız olan sizin "audio/AMR"  olmalıdır.Bence zaten MIME tipi olarak sound/.... diye olacağını sanmıyorum

Ayrıca şunları biliyormusunuz?

1- MMS protokolü bu içerik tipini kabul ediyor mu?

2- sunucu bu içerik tanıyorsa ve / veya karşı tarafta bir uyarı ve ya problem oluşuyor mu?

Saygılar,

 

1 - Öncelikle sunucu bu içeriği göndermem için bana örnek bir post gönderimi verdi amr dosyasını sound/amr olarak destekliyor. 

2 - Problem şöyle oluşuyor,benim iki dosyamı da trafiği takip ettiklerinde düzgün gönderdiğimi görebiliyolar ama sound/amr dosyamdan sonra mime boundary'i "--" ile kapamayın "\r" ile kapayın sorun bundan kaynaklanıyor dendi.Bi anlam vermedim bu mantığa ama öyle yaptım.Bu yöntem de sesi gönderememi çözmedi.Sesi hiç göndermemişim gibi davranıyor bana sunucu olay bu abi 

 

---- VERİLEN ÖRNEK KOD ------ 

 

 

POST /mms.xml HTTP/1.1

Host: api.turkcell.hedeflimesaj.com

Content-Type: multipart/form-data; boundary=mime-seperator

Content-Length: 1129

--mime-seperator

Content-Disposition: form-data; name="token"

1F023EE35F4D2B5713618A2958558229

--mime-seperator

Content-Disposition: form-data; name="name"

deneme mms'i

--mime-seperator

Content-Disposition: form-data; name="frame_count"

2

--mime-seperator

Content-Disposition: form-data; name="frame_1_text"

Ornek mesaj metni frame 1

--mime-seperator

Content-Disposition: form-data; name="frame_1_duration"

4

--mime-seperator

Content-Disposition: form-data; name="frame_1_visual"; filename="test1.gif"

Content-type: image/gif

(binary data)

--mime-seperator

Content-Disposition: form-data; name="frame_1_audio"; filename="test1.amr"

Content-type: sound/amr

(binary data)

--mime-seperator

Content-Disposition: form-data; name="frame_2_text"

Ornek mesaj metni frame 2

--mime-seperator

Content-Disposition: form-data; name="frame_2_duration"

4

--mime-seperator

Content-Disposition: form-data; name="frame_2_visual"; filename="test2.gif"

Content-type: image/gif

(binary data)

--mime-seperator

Content-Disposition: form-data; name="frame_2_audio"; filename="test2.amr"

Content-type: sound/amr

(binary data)

--mime-seperator 

 
Gönderildi : 07/06/2011 19:50

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Merhaba,

Öncelikle benim dediğim şekilde content-type  dediğim şekilde kodun içinde tekrar boundary içinde tanımlayarak tekrar denermisin.

 

Saygılar,

 
Gönderildi : 07/06/2011 20:31

(@MennanSevim)
Gönderiler: 89
Estimable Member
Konu başlatıcı
 

Merhaba,

Öncelikle benim dediğim şekilde content-type  dediğim şekilde kodun içinde tekrar boundary içinde tanımlayarak tekrar denermisin.

 

Saygılar,

 

 

Content-type olarak audio/AMR ve audio/WAV dosyalarını denedim,boundary olarak random değer aldım o da şöyle :

d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

ve bitiş :

d29a0c638b540b23e9a29a3a9aebc900aeeb6a82--

Gönderimde ses ulaşmıyor yine.Artık sorunun sunucudan olduğundan şüpheleniyorum ama diğer çözüm ortaklarının bu servisi kullandıklarını söylüyorlar anlam veremiyorum

 
Gönderildi : 08/06/2011 13:06

Paylaş: