Я занимаюсь разработкой веб-приложения с Flask на бэкэнде и React и Redux на веб-интерфейсе. Я хочу добавить опцию «Изменить изображение профиля» на страницу профиля, но всякий раз, когда я отправляю запрос с топором ios на мой маршрут /api/user/upload_image/
, я получаю следующие ошибки:
Access to XMLHttpRequest at 'http://localhost:5000/api/user/update_image' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
PATCH http://localhost:5000/api/user/update_image net::ERR_FAILED
Какие странно, потому что я установил свою оболочку CORS в своем приложении Flask следующим образом:
self.cors = CORS(self.app, resources={r"/api/*": {"origins": "*"}})
, который должен разрешать запросы в / api / из всех источников.
Я также пытался сделать то же самое с Почтальоном, и это сработало как чудо - загрузил файл и сохранил его в /server/public/profile_pictures/
Когда я пытаюсь загрузить обычный текст JSON из моего приложения реагирования, оно также работает. Он выдает ошибку только при загрузке файлов.
Вот JSX для ввода + обработчик событий
<label>
Change Profile Picture
<input onChange={(e) => {
this.setState({image: e.target.files[0]})}
} type="file" name="image" />
</label>
Затем у меня есть кнопка отправки, которая отправляет следующее действие с this.state.image
как параметр:
export const updateImage = (file) => {
return async (dispatch, getState) => {
const formData = {
user_id: getState().currentUser.user.user_id,
auth_key: getState().currentUser.auth_key,
image: file
}
Axios.patch("http://localhost:5000/api/user/update_image", formData, {
headers: {
'Content-Type' : 'multipart/form-data'
}
})
.then(response => {
dispatch({type: UPDATE_IMAGE, payload: response.data})
})
}
Я пытался использовать встроенный метод formData
для создания объекта JS, но это тоже не помогло.
Наконец, вот python метод, который вызывается при достижении маршрута /api/user/update_image
:
def update_image(self, request):
image = request.files['image']
data = request.params
image.save("./public/profile_pictures/user_p_picture_id_"+data['user_id']+".jpg")
fsql.update("""UPDATE users SET profile_picture = %s WHERE user_id = %s""", ("/public/profile_pictures/user_p_picture_id_"+data['user_id']+".jpg", data['user_id']))
return jsonify({
"error_code" : "200",
"error_message" : "Success"
})