У меня есть настройка django REST API, который будет принимать обычный текстовый файл, обрабатывать его и отправлять обратно вывод, который у меня есть, кроме части загрузки.
class Validate(views.APIView):
parser_class = (FileUploadParser,)
def post(self, request, format=None):
print("Validation request received")
if 'file' not in request.data:
raise ParseError("Empty Content")
uploadedFile = request.data['file']
data = request.data
print(type(uploadedFile))
runValidationWrapper(uploadedFile)
outputFile = os.path.splitext(uploadedFile)[0] + "_validation_output.xml"
document = open(outputFile, 'rb')
response = HttpResponse(FileWrapper(document), content_type='text/plain')
#response['Content-Length'] = document.size
response['Content-Disposition'] = 'attachment; filename="somefile.xml"'
Я называю это как следующее:
import requests
import json
import time
url = "http://127.0.0.1:8000/App/validate/"
#url = "http://192.168.166.142/nlp/App/validate/"
#headers = {"content-type":"application/json", "Accept": "text/plain"}
headers = {"content-type":"application/json"}
data ={"file" : '/home/dfdf/temp/PMC1257590_Missing Instances.xml')}
data_json = json.dumps(data)
response = requests.post(url, data= data_json, headers = headers)
file = open("validation.txt", "w")
file.write(response.text)
file.close()
Это прекрасно работало, когда я тестировал на том же сервере, потому что файл был доступен, но на самом деле он не загружался. Я думал, что FileUploadParser позаботится об этом. Нужно ли читать файл и отправлять байты? Как мне это сделать.