2013-01-07 1 views
2

Я пытаюсь отправить файлы изображений с помощью phonegap's filetransfer.upload, но возвращенный файл сломан и смотрит на logcat, что отправленный файл кажется слишком коротким.phonegap filetransfer.upload для отправки изображения на сервер 200 байт слишком короткое

Вот мой код для отправки файла

sendImageFile = function (imageURI, imageName) { 
    writelog("Sending image file", 1); 
    var options = new FileUploadOptions(); 
      options.fileKey="file"; 
      options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1); 
      options.mimeType="image/jpeg"; 
      var params = new Object(); 
      params.value1 = "image name"; 
      options.params = params; 
      options.chunkedMode = false; 
      var ft = new FileTransfer(); 
      writelog("image uri length " + imageURI.length, 1); 
    writelog("Image options set up successfully", 1); 
    var ft = new FileTransfer(); 
    ft.upload(imageURI, uploadurl, win, transFail, options); 
} 

и вот некоторые соответствующие строки из LogCat

01-07 12:27:30.743: D/FileTransfer(20066): Uploaded 114688 of 145432 bytes 

01-07 12:27:31.571: D/FileTransfer(20066): got response from server 

01-07 12:27:31.696: D/CordovaLog(20066): Code = 200 

01-07 12:27:31.696: D/CordovaLog(20066): Response = 12099 

01-07 12:27:31.696: D/CordovaLog(20066): Sent = 145236 

Любая помощь будет высоко ценится.

Благодаря

Matt

ответ

2

Решение найдено. Мой сервер принимал все данные, отправленные в виде файла, а не разбивал их из формы submit (я считаю). Это привело к появлению нескольких строк текста непосредственно перед основными данными изображения.

Чтобы обойти это, я установил старый плагин fileTransfer (https://github.com/phonegap/phonegap-plugins/tree/master/Android/FileUploader), вернувшись к версии 1.8.1 телефонной заставки (поскольку я был unsure, как обновить старый плагин на данный момент).

Отредактировано файл fileUpload.java, чтобы удалить весь текст перед отправкой файла. Теперь он может быть прочитан сервером

1

Вы не можете использовать imageUri, что вы получите от успеха камеры обратного вызова на Android в методе загрузки FileTransfer, вы должны сначала решить URI как имя файла, как это:

navigator.camera.getPicture(function(imageURI){ 

    window.resolveLocalFileSystemURI(imageURI, function(fileEntry) { 
     fileEntry.file(function(fileObj) { 

      var fileName = fileObj.fullPath; 

      //now use the fileName in your upload method 
      var options = new FileUploadOptions(); 
      options.fileKey = "file"; 
      options.fileName = fileName.substr(fileName.lastIndexOf('/')+1); 
      //... 
     }); 
    }); 

}, errorFn, cameraParams); 
+0

Спасибо за помощь. Теперь он использует fileEntry.file. Глядя на данные связи, поступает правильное количество байтов, но изображение все еще повреждено. Это нормально на устройстве, поскольку оно отображается на странице после того, как изображение взято – maj21

+0

Возможно, у вас есть проблема с кодом вашей серверной части, чем. Конечно, используйте console.log на fileObj.fullPath и посмотрите, что вы получаете. Если вы видите правильное имя файла (с расширением), ваш код на стороне клиента должен быть в порядке, поэтому на вашей стороне может возникнуть ошибка. –

+0

@ user1487927 Это на самом деле не верно для кода FileTransfer. Я исправил его, чтобы он разрешил контент: uri's file paths в одном из релизов Cordova. –