Как отправить файл 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Должен ли я сжимать изображения в серверной части Java перед отправкой во внешний интерфейс?
Anonymous » » в форуме JAVA - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-