Forum
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;
}
}
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,
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.
Ö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
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,
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
Merhaba,
Öncelikle benim dediğim şekilde content-type dediğim şekilde kodun içinde tekrar boundary içinde tanımlayarak tekrar denermisin.
Saygılar,
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