1

我正在尝试将照片从 Titanium Appcelerator 移动应用程序发送到网络服务器。

我正在使用以下示例:

var upload_token = "hi! I am a token!";

var content = '';
var boundary = '---------------------------170062046428149';

content += '--'+ boundary + '\r\n';
content += 'Content-Disposition: form-data; name="uploadToken"\r\n';
content += '\r\n';
content += upload_token + '\r\n';
content += '--'+ boundary + '\r\n';
content += 'Content-Disposition: form-data; name="myNickname"\r\n';
content += '\r\n';
content += myNickname+'\r\n';
content += '--'+ boundary + '\r\n';

content += 'Content-Disposition: form-data; name="nativePath"\r\n';
content += '\r\n';
content += 'file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\r\n';
content += '--'+ boundary + '\r\n';

content += 'Content-Disposition: form-data; name="fileContent"; filename="/appicon.png"\r\n';
content += 'Content-Type: binary/octet-stream\r\n';
content += '\r\n';

var file = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, '/appicon.png');
var full_content = Ti.createBuffer({value: content});
var fileStream = Ti.Stream.createStream({ source : file.read(), mode : Titanium.Stream.MODE_READ});
var content_size = full_content.append(Ti.Stream.readAll(fileStream));
Ti.API.debug('Appended File Size : ' + content_size ); // ==> same as file.size

content = '\r\n';
content += '--'+ boundary + '--\r\n';
full_content.append(Ti.createBuffer({value : content}));

xhr = Ti.Network.createHTTPClient();
var send_data = full_content.toBlob();

var url = 'http://website.address/api/push_photo.php';
xhr.onload = function(e){
    console.log(e);
    alert("DONE!");
};
xhr.onerror = function(e){
    console.log(e);
};
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
xhr.send({image:send_data});

一切正常,文件传输到服务器,我手机中的 Titanium 应用程序说“完成!”。这意味着 xhr.onload 已被触发...

我的问题是关于我能够在开发者控制台中看到的错误:

appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73) [错误]:TiHTTPClient:在 org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1155) [错误]:TiHTTPClient:在 android。 os.Handler.dispatchMessage(Handler.java:95) [错误]:TiHTTPClient:在 android.os.Looper.loop(Looper.java:137)[错误]:TiHTTPClient:在 org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread。 run(KrollRuntime.java:118) [WARN] : TiBlob: (KrollRuntimeThread) [24,13680] 非文件 blob 类型不支持 getFile。[警告]:TiBlob:(KrollRuntimeThread)[8,13688] 非文件 blob 类型不支持 getNativePath。[信息]:TiHTTPClient:在 android.os.Handler.dispatchMessage(Handler.java:95)[错误]:TiHTTPClient:在 android.os.Looper.loop(Looper.java:137)[错误]:TiHTTPClient:在 org.appcelerator.kroll .KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118) [WARN] : TiBlob: (KrollRuntimeThread) [24,13680] 非文件 blob 类型不支持 getFile。[警告]:TiBlob:(KrollRuntimeThread)[8,13688] 非文件 blob 类型不支持 getNativePath。[信息]:TiHTTPClient:在 android.os.Handler.dispatchMessage(Handler.java:95)[错误]:TiHTTPClient:在 android.os.Looper.loop(Looper.java:137)[错误]:TiHTTPClient:在 org.appcelerator.kroll .KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118) [WARN] : TiBlob: (KrollRuntimeThread) [24,13680] 非文件 blob 类型不支持 getFile。[警告]:TiBlob:(KrollRuntimeThread)[8,13688] 非文件 blob 类型不支持 getNativePath。[信息]:(KrollRuntimeThread) [8,13688] 非文件 blob 类型不支持 getNativePath。[信息]:(KrollRuntimeThread) [8,13688] 非文件 blob 类型不支持 getNativePath。[信息]:
{"code":0,"source":{"responseText":"Array\n(\n [uploadToken] => hi!我是令牌!\n [myNickname] => raholl\n [nativePath] => file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\n)\n","location":"http://********/api/push_photo .php","status":200,"domain":null,"readyState":4,"tlsVersion":0,"connectionType":"POST","validatesSecureCertificate":false,"statusText":"OK", "username":null,"password":null,"allResponseHeaders":"null:HTTP/1.1 200 OK\nConnection:Keep-Alive\nContent-Length:166\nContent-Type:text/html\nDate:Wed, 18 2016 年 5 月 02:10:12 GMT\nKeep-Alive:timeout=5, max=100\nServer:Apache/2.2.22 (Debian)\n不同:接受编码\nX-Android-Received-Millis:1463537845271\nX-Android-Sent-Millis:1463537844807\nX-Powered-By:PHP/5.5.33-1~dotdeb+7.1\n","re​​sponseXML":null ,"responseData":{"file":null,"nativePath":null,"height":0,"length":166,"width":0,"mimeType":"text/html","apiName": "Ti.Blob","text":"Array\n(\n [uploadToken] => hi!我是一个令牌!\n [myNickname] => raholl\nTi.Blob","text":"Array\n(\n [uploadToken] => hi!我是一个令牌!\n [myNickname] => raholl\nTi.Blob","text":"Array\n(\n [uploadToken] => hi!我是一个令牌!\n [myNickname] => raholl\n
[nativePath] => file:///storage/emulated/0/Pictures/app-name/tia-217296905.jpg\n)\n","type":2,"bubbleParent":true},"autoRedirect" :true,"apiName":"Ti.Network.HTTPClient","autoEncodeUrl":true,"connected":false,"bubbleParent":true,"_events":{"disposehandle":{}}},"success" :true} [INFO] : ALERT: (KrollRuntimeThread) [8,13696] 完成

这个“错误解析 XML [错误]”来自哪一行?如何解决?

一切似乎都很好,但错误看起来很严重......

任何想法,将不胜感激。

4

1 回答 1

1

哈哈

console.log(e);

在里面

xhr.onload = function(e){
 divider("ONLOAD DONE");
 //console.log(JSON.stringify(e));
 //console.log(e);
 alert("done");
};

没有 console.log,不会出现错误,一切正常。可能e为空或无效的记录对象...

于 2016-05-18T13:47:35.507 回答