1

FileTransfer.upload メソッドを使用して、デバイスのカメラで撮影した画像をアップロードしようとしていますが、一貫してFILE_NOT_FOUND_ERR. PhoneGap Build 経由で Cordova 2.2.0 を使用しています。

私は写真を撮り、その URI を localStorage に保存しています (Backbone 経由):

navigator.camera.getPicture(
    (file_uri) =>
        params.file_uri = file_uri
        params.is_image = 1
        collection.create params
    (message) ->
        U.Alert "Failed: #{message}"
    options
)

次に、その画像をアップロードしようとしています:

file_uri = @get('file_uri')

transferOpts = new FileUploadOptions
transferOpts.fileKey = 'attachment'
transferOpts.fileName = file_uri.substr file_uri.lastIndexOf('/') + 1
transferOpts.chunkedMode = false

transfer = new FileTransfer
transfer.upload(file_uri, @url(), success, error, transferOpts)

これにより、FileTransfer のerrorコールバックは常に次のようにスローされます。

{
    code: 1,
    http_status: 411,
    source: "content://media/external/images/media/8416",
    target: "https://mywebapp.com/api/endpoint"
}

コード 1 は PhoneGap のFILE_NOT_FOUND_ERR応答コードです。しかし、ファイルがデバイス上に存在することを確認しました。まず、 をfile_uri画像として画面に表示できます。次に、次のように Weinre デバッガーを使用してイメージ ファイルの内容を取得できます。

var reader = new FileReader();
reader.onloadend = function(e) {
    console.log('Read as data URL');
    console.log(e.target.result);
};
reader.readAsDataUrl(file_uri);

ログに記録されたdata:image/jpeg;base64応答は正しいイメージです。

今、私は 1 つの StackOverflow の質問で見たように、手動で URI を解決しようとしました:

resolveLocalFileSystemURI file_uri, (fileEntry) => fileEntry.file (fileObj) =>
    transferOpts = new FileUploadOptions
    transferOpts.fileKey = 'attachment'
    transferOpts.fileName = fileObj.name
    transferOpts.chunkedMode = false

    transfer = new FileTransfer
    transfer.upload(fileObj.fullPath, @url(), success, error, transferOpts)

この場合、次のようfileObj.fullPathに解決されます。/mnt/sdcard/Android/data/com.COMPANY.APPNAME/cache/1359412873161.jpg

そして、まだ運がありません。この時点で、私が見逃しているのはばかげていると確信しています!

4

1 に答える 1

1

同様の問題があり、「file://」形式のソース uri を使用して解決しました

于 2013-07-11T08:30:58.457 に答える