如何在flask应用程序中解析Cordova / Phonegap文件上传

时间:2015-03-18 09:58:34

标签: python cordova flask request file-transfer

我一直在使用Ionic框架开发Cordova应用程序。我正在尝试对我的Python-Flask后端进行“文件传输”,但我不断收到“400 Bad Request”。我很确定错误是由烧瓶中的请求解析方法引起的(我目前正在使用“request.file []”)。

但我似乎无法弄清楚如何正确解析POST请求。

POST是在chunkedMode中发送的,mime类型为“image / jpeg”,不确定这是否会产生任何影响(我的Nginx代理设置为在分块模式下正确接收POST)。

我的客户代码:

$scope.getPhoto = function() {
            $scope.modal.show();
            navigator.camera.getPicture(
                    // Succes
                    function(imageURI){
                        // Upload image
                        var options = new FileUploadOptions();
                        options.fileKey = "file";
                        options.fileName = imageURI.substr(imageURI.lastIndexOf('/')+1);
                        options.mimeType = "image/jpeg";
                        options.trustAllHosts = true;
                        options.chunkedMode = true;
                        var ft = new FileTransfer();
                        // Initiate upload
                        ft.upload(imageURI, encodeURI("http://192.168.1.53/"), 
                            // Succes
                            function(succes){
                                alert(succes.response);
                                console.log(succes.response);
                            }, 
                            function(error){
                                alert(error.target);
                                console.log(error);
                            }, 
                            options
                        );
                    },
                    // Error
                    function(message) {
                        console.log('get picture failed'); 
                    },
                    // Options
                    { 
                        quality: 100, 
                        encodingType: Camera.EncodingType.JPEG,
                        allowEdit : false,
                        correctOrientation: true,
                        destinationType: navigator.camera.DestinationType.FILE_URI,
                        sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
                    }
                );

我在PHP中使用了以下代码:

if(isset($_FILES["somefile"]))
{
        //Filter the file types.
        if ($_FILES["somefile"]["error"] > 0)
        {
          echo "error:" + $_FILES["somefile"]["error"];
        }
        else
        {       
           callSomeFunction();
        }

} // End of function

我目前的烧瓶应用程序看起来像这样:

@app.route("/", methods=["GET", "POST"])
def upload_file():
    if request.method == "POST":
        file = request.files["file"]
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))
            #fileStream = file.stream
            #print(opencvDataFromStream(fileStream))
            #processImage(filename)
            return processImage(filename)
    return """
    <!doctype html>
    <title>Upload new File</title>
    <h1>Upload new File</h1>
    <form action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
         <input type=submit value=Upload>
    </form>
    """

如您所见,它返回一个表单,当POST通过表单发送时,请求将按预期处理。 但是当POST请求通过跨侧Cordova客户端发送时,我收到错误的请求错误。

有人会碰巧知道如何解决这个问题吗?

真诚的烧瓶n00b。

1 个答案:

答案 0 :(得分:1)

所以我搞砸了...... 由于事实上客户端中的fileKey(&#34; imageToScan&#34;)参数与我的Flask后端所期望的相同的fileKey(&#34;文件& #34;。)