我已经开发了一个网络应用程序,并使用以下代码行发送图像到后端。
const SubmitImage = () => {
if (!image) return alert('Please select an image first');
const formData = new FormData();
formData.append('image', image);
fetch('http://127.0.0.1:8000//api/classify-image', {
method: 'POST',
body: formData,
})
.then((response) => response.json())
.then((data) => {
console.log(data);
Navigate('/output', { state: { image: image } });
})
.catch((error) => {
console.error('Error:', error);
});
};
我发送的文件上传为图像,也移动到一个新的网页在同一时间。在后端方面,我用这个来接收图像。
class UploadView(APIView):
# permission_classes = (permissions.AllowAny,)
parser_classes = (MultiPartParser, JSONParser)
@staticmethod
def post(request):
Image_predict= request.data.get('Image')
#loading models
ResNetModel = ResNetModelConfig.model
InceptionV3model = InceptionV3modelConfig.model
# Preprocess the image (this needs to be checked)
image_raw = Image.open(Image_predict)
image1 = np.array(image_raw.resize((224, 224)))
if len(image1.shape) == 2: #code checks if the image is grayscale. If it is, the image is converted to color by duplicating the grayscale channel three times to create an RGB image.
image1 = np.expand_dims(image1, axis=2)
image1 = np.concatenate([image1, image1, image1], axis=-1)
elif len(image1.shape) == 3 and image1.shape[2] == 4: #code checks if the image has an alpha channel. If it does, the alpha channel is removed.
image1 = image1[:, :, :3]
我最终收到500内部服务器错误或AttributeError: 'NoneType' object has no attribute 'seek'
AttributeError: 'NoneType' object has no attribute 'read'
我该怎么解决这个问题?
我希望代码能够接收图像并发送回预测。(我没有包括在代码中)我是新的后端开发,所以我没有太多的线索,我可以做些什么来避免这种情况。
1条答案
按热度按时间wf82jlnq1#
以下是您可以尝试解决此问题的一些方法:
确保HTML表单中文件输入字段的
name
属性与JavaScript代码中formData.append('image', image)
所使用的名称匹配。检查上传图像的文件大小是否太大,服务器无法处理。您可以通过在Django设置中添加以下内容来设置上传图像的最大文件大小:
第一行将最大文件大小设置为5MB。第二行和第三行设置上载文件的权限。
请确保请求中的
Content-Type
报头被正确设置为multipart/form-data
。您可以使用浏览器的开发者工具或Postman之类的工具检查这一点。尝试使用
request.FILES.get('image')
检索上载的文件,而不是使用request.data.get('Image')
。Image_predict = request.FILES.get('image')
这将为您提供一个django.core.files.uploadedfile.InMemoryUploadedFile
或django.core.files.uploadedfile.TemporaryUploadedFile
的示例,然后您可以使用它来打开和预处理图像。在后端代码中,您使用
Image.open(Image_predict)
打开图像文件。这可能不起作用,因为Image_predict
是一个类似文件的对象,而不是文件路径。相反,您可以使用Image.open(Image_predict.file)
打开文件。image_raw = Image.open(Image_predict.file)
此外,您可能需要在打开图像之前添加Image_predict.seek(0)
,以确保文件指针位于文件的开头。