現在、PhoneGap で非常に厄介な問題が発生しています。イメージをリモート サーバーにアップロードするアプリを作成しました (サーバーは PHP を実行します)。
WiFi 経由で画像をアップロードすると、アプリは完全に動作しますが、2G/3G 経由で同じ画像をアップロードしても何も起こりません。エラー コールバックも成功コールバックもありません。何も起こりません。
いくつかの非常に小さな (~150kb) ファイルを含むさまざまなファイル サイズを試しましたが、役に立たないようです。Cordova バージョン 2.5、2.6、および 2.7 を試しました。アプリは phonegap ドキュメントのデフォルトの例を使用します。アプリのコードは次のとおりです。
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
},
doStuff: function() {
navigator.camera.getPicture(app.uploadPhoto,
function(message) { alert('get picture failed'); },
{ quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
);
},
uploadPhoto: function(imageURI) {
var options = new FileUploadOptions();
options.fileKey="files";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = {};
params.pathname = "VARIABLE_FOR_SERVER";
params['file-type'] = 'image';
options.params = params;
try {
var ft = new FileTransfer();
ft.upload(imageURI, encodeURI("SERVER_URL_HERE"), app.win, app.fail, options, true);
} catch (err) {
console.log('catch error');
console.log(err);
}
},
win: function(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
},
fail: function(error) {
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
}
};
サーバー上の $_FILES 変数は空です。私はこれを修正/デバッグしようとして夢中になっているので、ここで何が起こっているのか誰か知っていますか:D