POST-запрос к простому представлению Django (размещен на Heroku с использованием gunicorn) приводит к ошибке прерванного запроса H18 Server - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть простое представление Django, которое я использую для (очень грубой) проверки выполнения запросов POST с прикрепленным аудиофайлом. Представление просто:

@csrf_exempt
def create_from_audio(request):
    return HttpResponse("accepted")

Но в моей логи геройки я вижу:

2018-10-31T23:55:02.018787+00:00 heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="/polls/create_from_audio" host=XXX request_id=e3608c6e-8c91-440a-ade4-b854e1f72f07 fwd="174.62.90.138" dyno=web.1 connect=0ms service=163ms status=503 bytes=199 protocol=https

Вот код для отправки запроса:

let url = URL(string:"...")!
        let session = URLSession.shared
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("audio/m4a", forHTTPHeaderField: "Content-Type")
        request.httpBody = data
        let task = session.dataTask(with: request) { data, response, error in
            if let error = error {
                NSLog("send error: \(error.localizedDescription)")
                self.showLoading(message: "error sending", error: true)
            } else {
                guard let response = response as? HTTPURLResponse else { return }
                NSLog("send complete, response: \(response.statusCode)")
                if let pendingMessage = self.pendingNewMessage {
                    self.conversation.messages.append(pendingMessage)
                    self.refreshUI()
                }
            }
        }
        task.resume()

(Я понимаю, что в производственной среде было бы лучше загрузить непосредственно на s3, но в моем случае я просто пытаюсь проверить грубую скорость загрузки файлов с помощью базовой реализации.)

1 Ответ

0 голосов
/ 02 ноября 2018

Мне не удалось заставить это работать с Джанго. Я переключился на Flask, и теперь он работает, даже с большими файлами размером около 20 МБ:

@app.route('/upload', methods=['POST', 'GET'])
def upload():
    if request.method == 'POST':
        print("it's a post!")
        file = request.files['file']
        file.save('inprogress.m4a')
        return 'Success'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...