Javascript 如何将本地映像文件作为$.ajax POST请求中的多部分表单请求部分附加?

Javascript 如何将本地映像文件作为$.ajax POST请求中的多部分表单请求部分附加?,javascript,jquery,ajax,html,cloudsight,Javascript,Jquery,Ajax,Html,Cloudsight,我正在尝试构建一个移动应用程序(带有cordova和html5的混合应用程序,不是本地的,这是javascript代码!),它允许使用外部服务API(如cloudsight)拍摄图片并搜索图片内容(这里的文档:)。根据他们的文档,请求应该通过URL使用远程图像(这非常有效)或作为多部分表单请求部分附加本地图像来完成,因为我想用从手机上拍摄的照片来完成,我想附加本地图像,但我不知道如何做! 这是我的jQuery Ajax调用代码,$scope.lastPhoto是一个字符串,带有我的本地图片文件U

我正在尝试构建一个移动应用程序(带有cordova和html5的混合应用程序,不是本地的,这是javascript代码!),它允许使用外部服务API(如cloudsight)拍摄图片并搜索图片内容(这里的文档:)。根据他们的文档,请求应该通过URL使用远程图像(这非常有效)或作为多部分表单请求部分附加本地图像来完成,因为我想用从手机上拍摄的照片来完成,我想附加本地图像,但我不知道如何做! 这是我的jQuery Ajax调用代码,$scope.lastPhoto是一个字符串,带有我的本地图片文件URI位置(如下所示)file://asdasd/asdsad/dsa/pic.jpg)中,如何将其作为多部分表单请求部分发送

$.ajax({
        method: "POST",
        url: "https://api.cloudsightapi.com/image_requests",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "CloudSight mykeywhichiwontshowtoyou");
        },
        data: {
            //I've tried this syntax but doesnt work
            'image_request[image]': new FormData().append('file', $scope.lastPhoto),

            //This doesnt work neither since it's just my local pic address
            //'image_request[image]': $scope.lastPhoto,

            //request with a remote image that actually works
            //"image_request[remote_image_url]": "http://pf.pfgcdn.net/sites/poltronafrau.com/files/styles/scheda_prodotto_gallery/public/content/catalogo/any_case/immagini/anycase.jpg",
            "image_request[locale]": "en-US"
        },
        success: function (msg) {
            $scope.token = msg.token;
        },
        error: function (msg) {
            console.log(msg.responseText);
        }
    });

可以将包含表单数据的图像作为多部分发送

您需要使用FileTransferPlugin。它以多部分形式发送带有表单数据的图像数据

第一件事是从照相机/多媒体资料中捕获文件,成功后,将其保存:

         fileURL=imageData;
然后,要将表单提交到服务器,下面是代码片段

        var params = {};
        params.username= "coolUser";
        params.userage = 12;

        var uploadOptions = new FileUploadOptions();
        var ft = new FileTransfer();

        uploadOptions.fileKey = "expectedNameOUploadFile";
        uploadOptions.fileName = fileName; // name of the file
        uploadOptions.mimeType = "image/jpeg"; 
        uploadOptions.httpMethod = "POST";
        uploadOptions.params = params;

        ft.upload(fileURL,
            serviceURL,
            photoSuccess,
            photoFail,
            uploadOptions,
            true
        );

你不是把angular和Jquery混合在一起了吗……你本来应该使用$http,而不是$ajaxI。起初,我使用angular服务$http,但由于某种原因,它无法工作,所以我尝试了这个ajax调用,工作得很好,但这不是重点:我只需要了解如何正确附加本地文件,然后我将尝试使用angular$http使其工作,现在这只是一个API测试代码…这实际上可能会工作,但我如何附加所需的参数?我的意思是,数据不仅仅是图像文件,它还需要两个字段:{'image_request[image]':imageFile,“image_request[locale]:“en-US”}。。。如何使用Cordova文件传输插件的上载方法正确发送此文件?