一件非常奇怪的事情发生了。
## app.py
from flask import Flask
from flask_cors import CORS
import numpy as np
import nibabel as nib
app = Flask(__name__)
CORS(app)
@app.route("/",methods=["POST"])
def readNifti():
img = nib.load("../data/test_project/sub-mrmdCrown_Hep3bLuc_11/ses-iv03/anat/sub-mrmdCrown_Hep3bLuc_11_ses-iv03_acq-TurboRARE_run-5_T2w.nii.gz")
data = img.get_fdata()
datamin=data.min()
datamax=data.max()
data = np.round((data-datamin)/(datamax-datamin)*200).astype(np.uint8).tobytes()
# return data
return np.ones((100,123),dtype=np.uint8).tobytes()
app.run(port=3413)
<template>
<div>
Hello World
</div>
</template>
<script setup lang="ts">
import { onMounted } from 'vue';
onMounted(() => {
fetch("http://localhost:3413", {
method: "POST"
})
.then(res => res.arrayBuffer())
.then((data) => {
console.log(data.byteLength);
})
})
</script>
当然,这很好用。Vue应用程序在端口3412上运行。Flask应用程序在端口3413上运行。
但是,如果我只修改app.py
的一行,它就变成了:
@app.route("/",methods=["POST"])
def readNifti():
img = nib.load("../data/test_project/sub-mrmdCrown_Hep3bLuc_11/ses-iv03/anat/sub-mrmdCrown_Hep3bLuc_11_ses-iv03_acq-TurboRARE_run-5_T2w.nii.gz")
data = img.get_fdata()
datamin=data.min()
datamax=data.max()
data = np.round((data-datamin)/(datamax-datamin)*200).astype(np.uint8).tobytes()
return data # this is the only line changed
return np.ones((100,123),dtype=np.uint8).tobytes()
当然,它仍然工作得很好。然而,如果我只是改变另一条线,它就会失败。
@app.route("/",methods=["POST"])
def readNifti():
img = nib.load("../data/test_project/sub-mrmdCrown_Hep3bLuc_11/ses-iv03/anat/sub-mrmdCrown_Hep3bLuc_11_ses-iv03_acq-TurboRARE_run-5_T2w.nii.gz")
data = img.get_fdata()
datamin=data.min()
datamax=data.max()
# the next line: 200 -> 255, only this number is changed
data = np.round((data-datamin)/(datamax-datamin)*255).astype(np.uint8).tobytes()
return data
return np.ones((100,123),dtype=np.uint8).tobytes()
Vue代码永远不会改变。但浏览器说:
CORS策略已阻止从源“http://localhost:3412”获取“http://localhost:3413/”:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果一个不透明的响应满足了你的需求,将请求的模式设置为“no-cors”,以在禁用CORS的情况下获取资源。
为什么阵列的振幅会影响CORS?这是一个bug吗?可能的原因是什么?我能做些什么来解决这个问题?我只是想在传输之前缩小图像的大小。
顺便说一句,我使用SSH本地端口转发将3413和3412从Linux主机转发到我的Windows机器。
顺便说一下,flask在检测到代码中的任何更改时会重新启动应用程序。但它并不总是可靠的。请在每次对python代码进行任何更改时终止flask应用程序并重新启动它。
版本信息:
Chrome:版本114.0.5735.199(正式构建)(64位)
>>> import flask
>>> flask.__version__
'2.2.2'
>>> import flask_cors
>>> flask_cors.__version__
'3.0.10'
>>> import numpy
>>> numpy.__version__
'1.25.0'
>>> import nibabel
>>> nibabel.__version__
'5.1.0'
$ node -v
v16.13.1
$ npm -v
8.1.2
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
1条答案
按热度按时间ttp71kqs1#
我找到原因了。我碰巧看到了杀毒软件(Sophos)的日志,发现
http://localhost
被阻止了。这可能就是原因很抱歉,我没有提供一个最小的可重复的例子。我放弃了以前端和后端的形式编写应用程序,并决定重新开始,使其成为桌面软件。
谢谢大家的好意!