我一直在使用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。
答案 0 :(得分:1)
所以我搞砸了...... 由于事实上客户端中的fileKey(&#34; imageToScan&#34;)参数与我的Flask后端所期望的相同的fileKey(&#34;文件& #34;。)