Как отправить файл Excel, сохраненный на ПК, на котором запущена серверная часть, во внешний браузер (доступный с другого компьютера), который запрашивает файл?
У меня есть серверная часть бутылки Python, которая Я хочу использовать для отправки файла Excel во внешний интерфейс Vue JS, который будет загружен пользователем внешнего интерфейса. Файл Excel создается из базы данных на основе входных данных пользователя, а затем, когда я пытаюсь отправить обратно полученный файл Excel, я получаю ошибку CORS.
Если я отправляю данные в виде строки назад он сохраняется в загруженном Excel, но я не знаю, как переместить реальный файл, сохраненный на внутреннем ПК, на внешний интерфейс.
Забыв о создании файла, я просто пытаюсь отправить один сохраненный файл Excel из серверной части во внешний интерфейс и получаю следующую ошибку:
Запрос между источниками заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса по адресу http:/ /xxx.xxx.x.xxx:8090/generateExcel. (Причина: заголовок CORS «Access-Control-Allow-Origin» отсутствует). Код состояния: 200.
Вот код серверной части, отправляющий файл Excel:
import json
from bottle import run, static_file, request, response, Bottle
class EnableCors(object):
name = 'enable_cors'
api = 2
def apply(self, fn, context):
def _enable_cors(*args, **kwargs):
# set CORS headers
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS'
response.headers[
'Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'
if context.method != 'OPTIONS':
# actual request; reply with the actual response
return fn(*args, **kwargs)
return _enable_cors
app = Bottle()
app.install(EnableCors())
@app.route("/generateExcel", method=["OPTIONS", "POST"])
def generateExcel():
print("here")
# This is a local directory and file
file_dir = "/home/data/excelFiles/"
file_name = "sample_excel.xlsx" # file defintely exists!
return static_file(filename=file_name, root=file_dir)
Вот код js Front Vue, который вызывает его
fetch( process.env.VUE_APP_BACKEND_ADDR + '/' + 'generateExcel',
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(parameters),
responseType: 'blob'
}
).then((response) => {
console.log("here 2")
const url = URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a')
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
}).catch((error) => {
console.log(error);
let errorResponse = { status: "red", message: error + " in " + endpoint };
console.log(errorResponse);
})
Подробнее здесь: https://stackoverflow.com/questions/785 ... nd-using-b
Как отправить файл Excel из серверной части Python Bottle во внешний интерфейс Vue JS? Использование бутылки static_file ⇐ Python
Программы на Python
1716900096
Anonymous
Как отправить файл Excel, сохраненный на ПК, на котором запущена серверная часть, во внешний браузер (доступный с другого компьютера), который запрашивает файл?
У меня есть серверная часть бутылки Python, которая Я хочу использовать для отправки файла Excel во внешний интерфейс Vue JS, который будет загружен пользователем внешнего интерфейса. Файл Excel создается из базы данных на основе входных данных пользователя, а затем, когда я пытаюсь отправить обратно полученный файл Excel, я получаю ошибку CORS.
Если я отправляю данные в виде строки назад он сохраняется в загруженном Excel, но я не знаю, как переместить реальный файл, сохраненный на внутреннем ПК, на внешний интерфейс.
Забыв о создании файла, я просто пытаюсь отправить один сохраненный файл Excel из серверной части во внешний интерфейс и получаю следующую ошибку:
Запрос между источниками заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса по адресу http:/ /xxx.xxx.x.xxx:8090/generateExcel. (Причина: заголовок CORS «Access-Control-Allow-Origin» отсутствует). Код состояния: 200.
Вот код серверной части, отправляющий файл Excel:
import json
from bottle import run, static_file, request, response, Bottle
class EnableCors(object):
name = 'enable_cors'
api = 2
def apply(self, fn, context):
def _enable_cors(*args, **kwargs):
# set CORS headers
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS'
response.headers[
'Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'
if context.method != 'OPTIONS':
# actual request; reply with the actual response
return fn(*args, **kwargs)
return _enable_cors
app = Bottle()
app.install(EnableCors())
@app.route("/generateExcel", method=["OPTIONS", "POST"])
def generateExcel():
print("here")
# This is a local directory and file
file_dir = "/home/data/excelFiles/"
file_name = "sample_excel.xlsx" # file defintely exists!
return static_file(filename=file_name, root=file_dir)
Вот код js Front Vue, который вызывает его
fetch( process.env.VUE_APP_BACKEND_ADDR + '/' + 'generateExcel',
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(parameters),
responseType: 'blob'
}
).then((response) => {
console.log("here 2")
const url = URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a')
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
}).catch((error) => {
console.log(error);
let errorResponse = { status: "red", message: error + " in " + endpoint };
console.log(errorResponse);
})
Подробнее здесь: [url]https://stackoverflow.com/questions/78538553/how-to-send-an-excel-file-from-python-bottle-backend-to-vue-js-frontend-using-b[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия