Fat Free 无法通过文件上传捕获 Axios FormData
Fat Free failed to catch Axios FormData with file upload
我使用 Axios 向 Fat Free 发送 AJAX 请求。
接收者代码如下:
$files = \Web::instance()->receive(function($file){
var_dump($file);
return (substr($file["type"],0,6)=="image/");
}, true);
if($files===false)
throw new \Exception\UnexpectedInput("U didn't provide any file");
这是发件人(目前我使用 Axios 来完成这项工作。)
return new Promise((ok,err)=>{
var datanya = new FormData();
datanya.append(this.generateRandomString(), new Blob([file[0]], {type:"image/jpeg"}), "image.jpg");
// generate id for cancelation.
this.uploadCancelSource = CancelToken.source();
var config = {
cancelToken: this.uploadCancelSource.token,
onUploadProgress:(e)=>{
this.uploadProgress = Math.round( (e.loaded * 100) / e.total );
}
}
APICall.put("invoice/bukti", datanya, config).then(e=>{
});
});
有效载荷对我来说似乎没问题,我的意思是,它传输文件名、内容类型和表单名称。但是 FatFree Web 的 Class 没有捕捉到它。它只是告诉它是一个 application/octet-stream
.
这是有效负载的屏幕截图
这是从 \Web::instance()->receive
中转储的数据
你知道这个问题吗?
class Web
的当前行为是主要问题。正如您在 source code, or see the documentation 中看到的,它在不同的请求方法上有不同的行为。
一点hacking,可以用来解决当前的问题,但我决定更改请求方法。
我使用 Axios 向 Fat Free 发送 AJAX 请求。
接收者代码如下:
$files = \Web::instance()->receive(function($file){
var_dump($file);
return (substr($file["type"],0,6)=="image/");
}, true);
if($files===false)
throw new \Exception\UnexpectedInput("U didn't provide any file");
这是发件人(目前我使用 Axios 来完成这项工作。)
return new Promise((ok,err)=>{
var datanya = new FormData();
datanya.append(this.generateRandomString(), new Blob([file[0]], {type:"image/jpeg"}), "image.jpg");
// generate id for cancelation.
this.uploadCancelSource = CancelToken.source();
var config = {
cancelToken: this.uploadCancelSource.token,
onUploadProgress:(e)=>{
this.uploadProgress = Math.round( (e.loaded * 100) / e.total );
}
}
APICall.put("invoice/bukti", datanya, config).then(e=>{
});
});
有效载荷对我来说似乎没问题,我的意思是,它传输文件名、内容类型和表单名称。但是 FatFree Web 的 Class 没有捕捉到它。它只是告诉它是一个 application/octet-stream
.
这是有效负载的屏幕截图
这是从 \Web::instance()->receive
你知道这个问题吗?
class Web
的当前行为是主要问题。正如您在 source code, or see the documentation 中看到的,它在不同的请求方法上有不同的行为。
一点hacking,可以用来解决当前的问题,但我决定更改请求方法。