0

my_server_urliOS 用 Cordova を使用しており、次のコードを使用して RoR ベースのサーバーに画像をアップロードしようとしています。

var options = new FileUploadOptions();
var imagefileName = "capture.jpg";

options.fileKey = "capture";
options.fileName = "file://" + capturePath;
options.chunkedMode = false;

$('#capturedImagePreview').attr('src', options.fileName);

options.params = 
{
    some_id: 10,
};

alert("Uploading file " + options.fileName);

var uploader = new FileTransfer();

uploader.upload(capturePath, "https://my_server_url/api/v1/uploadCapture",
    function(event)
    {
        app.hideLoading();
        alert("Uploading succeeded: " + JSON.stringify(event));
    },

    function (event)
    {
        app.hideLoading();
        alert("Uploading failed: " + JSON.stringify(event));
    },

    options);

ファイル名は正しいようです (のようにfile:///var/mobile/Applications/{SOME_KIND_OF_UID}/tmp/photo.jpg); 画像自体は電話ギャラリーに表示されています。サーバーログでエラーを取得:

Parameters:
{
    "capture"=>#<ActionDispatch::Http::UploadedFile:0x00000006d1efd8 @original_filename="capture.jpg", @content_type=nil, @headers="Content-Disposition: form-data; name=\"capture\"; filename=\"capture.jpg\"\r\nContent-Length: 322009\r\n", @tempfile=#<File:/tmp/RackMultipart20130704-26512-1ja0glt>>
}

サーバー応答の取得:

75 7: unexpected token at `Syntax: exiftool [OPTIONS] FILE\\n\\nConsult the exiftool documentation for a full list of options

また、この応答では

bytesSent: 352039, responseCode: 200

これらのメッセージに混乱しており、Ruby プラットフォームを知りません。助けを求めています。アップロードを処理するサーバー コードの一部を以下に示します。

begin

  Rails.logger.debug"============uploaded file : #{params[:capture]} ==========================="
  src = process_upload(params[:capture]) if params[:capture].present?
  Rails.logger.debug "============== capture SRC :  #{src} =============================="

  # media metatags
  meta = %x(exiftool -u -d "%Y-%m-%d %H:%M:%S" -json #{src})
  Rails.logger.debug "========== Mobile Meta information : #{meta} ============="
  metatag = JSON.parse(meta)[0]

  capture = Capture.new(:media => File.open(src))

  # ....

サーバーログ

 Processing by Api::V1::DataController
  Parameters: {"capture"=>#<ActionDispatch::Http::UploadedFile:0x000000076f1bf0 @original_filename="photo_002.jpg", @content_type=nil, @headers="Content-Disposition: form-data; name=\"capture\"; filename=\"file:///var/mobile/Applications/F2297592-F606-40E5-A832-3CBD7EC8C1CC/tmp/photo_002.jpg\"\r\nContent-Length: 275115\r\n", @tempfile=#<File:/tmp/RackMultipart20130704-26512-1lm4o71>>}
WARNING: Can't verify CSRF token authenticity

============uploaded file : #<ActionDispatch::Http::UploadedFile:0x000000076f1bf0> ===========================

================== Upload Process Error: can't convert ActionDispatch::Http::UploadedFile into String ================
============== capture SRC :   ==============================
========== Mobile Meta information : Syntax:  exiftool [OPTIONS] FILE

Consult the exiftool documentation for a full list of options.
 =============
================== Mobile upload Error: 757: unexpected token at 'Syntax:  exiftool [OPTIONS] FILE

Consult the exiftool documentation for a full list of options.
' ================
4

1 に答える 1

0

トラブルは解決しました。サーバー コードに論理エラーがありました。のように書き換えて修正

def capture_upload
    current_device_user
begin

    src = saveTempFileToStorage(:tempfilePath => params[:capture].tempfile.path)

rescue Exception => e
    render :json => {:status => "failed",:content => "#{e.message}"}
end

end



def saveTempFileToStorage(tempfilePath)
begin

    target_file_full_path = "/home/deployer/mobileuploads/image01.jpg"
    FileUtils.cp(tempfilePath, target_file_full_path)

    return target_file_full_path

rescue Exception => e
    Rails.logger.debug "saveTempFileToStorage error: #{e.message}"
    return
end  

end
于 2013-07-05T13:01:52.230 に答える