Загрузка и обработка файлов на Django приводит к ошибке 500 при развертывании на Heroku
Веб-сайт: https://atw.herokuapp.com
Он позволяет пользователям вводить файлы Microsoft Word, и как только Django получает файлы, он их обрабатывает.
Я использую React для построения своего фронтенда, и код, отвечающий за выполнение POST-запроса после того, как пользователь закинул файлы, выглядит следующим образом:
const onDrop = useCallback((acceptedFiles) => {
// Do something
const csrftoken = Cookies.get("csrftoken");
var form_data = new FormData();
for (var i = 0; i < acceptedFiles.length; i++) {
form_data.append("atw", acceptedFiles[i]);
}
axios
.post("https://atw.herokuapp.com/upload/", form_data, {
header: {
"content-type": "undefined",
"X-CSRFToken": csrftoken,
},
})
.then((res) => {
window.open("https://atw.herokuapp.com/download/");
})
.catch((e) => console.log(e));
}, []);
У меня есть представление Django, которое обрабатывает загруженные файлы:
class Upload(APIView):
""" Process Microsoft Word files received through POST requests
"""
def post(self, request):
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
STATE['status'] = 'processing'
for f in request.FILES.getlist('atw'):
newfile = Document(docfile=f)
newfile.save()
output_filename = "OUT-ATW.docx"
processor = FilesProcessor(output_filename)
processor.process()
STATE['status'] = 'done'
return HttpResponse("Successfully processed files!")
else:
form = DocumentForm()
return render(request, 'myapp/index.html')
Я использую django-cors-headers
для обработки CORS-заголовков и всего такого, и внес herokuapp в белый список в моем settings.py
:
ALLOWED_HOSTS = ['.herokuapp.com', '127.0.0.1']
Проблема
Локально он работает нормально, но после развертывания проекта на Heroku я не могу успешно загрузить файлы. Вы можете попробовать воспользоваться ссылкой, приведенной выше.
Когда я закидываю файлы в dropZone, я получаю POST https://atw.herokuapp.com/upload/ 500 (Internal Server Error)
в консоли Chrome.
Есть ли что-то, что я упускаю? Я не против использования эфемерной файловой системы Heroku вместо AWS S3, потому что после обработки этих файлов я собираюсь удалить их в любом случае
Спасибо.
Какой журнал выводится на консоль при выборе метода POST?