PhoneGap fileupload / multipart для потоковой передачи - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь загрузить файл с phonegap в потоковую работу (https://streamwork.com/api/Post_an_item_File_item.html).

Я пробовал FileTransfer api Phonegap, который, похоже, не отправляет запрос, как потоковая работа хочет: </p> <pre><code>var url =getItemsURL(); var item = "<?xml version='1.0' encoding='UTF-8'?>" + "<item name='Test "+timestamp()+"'>" + "<description>my upload</description>" + "<file_item/>" + "</item>"; var win = function(r) { console.log("Code = " + r.responseCode); console.log("Response = " + r.response); console.log("Sent = " + r.bytesSent); } var fail = function(error) { alert("An error has occurred: Code = "+ error.code); } var options = new FileUploadOptions(); options.fileKey="file"; options.fileName="hello.txt"; options.mimeType="text/plain"; var params = new Object(); params.item = item; options.params = params; var paths = navigator.fileMgr.getRootPaths(); var ft = new FileTransfer(); ft.upload(paths[0] + "hello.txt",url, win, fail, options);

(на самом деле я вижу, что внутренний пробел вызывает "java.io.FileNotFoundException: https://streamwork.com/v1/activities/..."

Но URL-адрес должен быть правильным, так как я затем использовал его в ручном режимезаписано xhr.

</p> <p>function doUpload(data,fname,type,enc){</p> <pre><code>var url = getItemsURL(); var item = "<?xml version='1.0' encoding='UTF-8'?>" + "<item name='My new activity item "+timestamp()+"'>" + "<description>my upload</description>" + "<file_item/>" + "</item>"; var xhr = new XMLHttpRequest(); xhr.onreadystatechange=function(){ alert("xmlHttpObject.readyState = " + xhr.readyState + (xhr.readyState >= 3 ? " HTTP-Status = " + xhr.status : '')); }; xhr.open("POST",url, true); var boundary ="mime_boundary" xhr.setRequestHeader("Accept", 'application/xml'); xhr.setRequestHeader("Content-Type", 'multipart/form-data; boundary=' + boundary); var body = '--' + boundary + '\r\n'; body+='Content-Disposition: form-data; name="item"; filename="dummy.xml"\r\n'; body+= 'Content-Type: application/xml\r\n\r\n'; body+=item+'\r\n'; body+='--'+boundary+'\r\n\r\n'; body+='Content-Disposition: form-data; name="file"; filename="'+fname+'"\r\n'; body+='Content-Type: '+type+'\r\n'; body+='Content-Transfer-Encoding: '+enc+'\r\n\r\n'; body+=data+'--' + boundary + '--\r\n'; xhr.setRequestHeader('Content-length', body.length); xhr.send(body);

}

, которое я вызываю с помощью doUpload ("lorem ipsum foo bar", "test.txt", "text /plain "," binary ");

это работает в firefox, когда я даю ему право на кросс-доменное вещание, но когда я выполняю его на своем андроиде (htc desire hd), оно не работает.

Выходные данные изменения состояния готовности Firefox xhr: 1, 1, 2, 4 (0) Выходные изменения изменения состояния xhr Android: 1, 4 (0)

Есть ли у кого-нибудь идеи почего мне не хватает?

заранее спасибо max

...