2016-12-15 2 views
0

У нас есть два сервера (клиентская и базовая база данных), между которыми мы хотели бы передавать PDF-файлы. Вот поток данных:Передача файлов PDF между серверами в python

  1. Пользовательские запросы PDF с сайта.
  2. Сайт отправляет запрос клиенту-серверу.
  3. Клиентский сервер запрашивает PDF-файл с внешнего сервера (IP).
  4. Базовый сервер отправляет PDF на клиентский сервер.
  5. Клиентский сервер отправляет PDF на веб-сайт.

1-3 и 5 все хорошо, но проблема №4.

В настоящее время мы используем запросы на колбу для наших вызовов API и можем легко передавать текст и .csv, но двоичные файлы, такие как PDF, не работают.

И нет, у меня нет никакого кода, так что успокойтесь. Просто ищите предложения от кого-то, кто, возможно, столкнулся с этой проблемой.

+1

http://stackoverflow.com/questions/11017466/flask-return-image-created-from-database – maxymoo

+1

Взгляните на [SCP] (https://pypi.python.org/pypi/scp) и [scpclient] (https://pypi.python.org/pypi/scpclient) –

+0

@maxymoo et al. Спасибо, парни. Хорошая информация. Не уверен, что я могу отметить ответ как * * ответ, но все же дадим ему все. – pshep123

ответ

1

Как вы сказали, вы сказали, что у вас нет кода, все в порядке, но я могу дать только несколько предложений.

Я не уверен как вы отправляете свои файлы, но я предполагаю, что вы используете функцию pythons open.

  1. Убедитесь, что вы читаете файл в байтах (например open('<pdf-file>','rb'))

  2. Вырезать файл на куски и отправить его в виде одного файла, таким образом, он не замерзает или застрять.

  3. Попробуйте уменьшить PDF-файлы, если это работает, попробуйте предложение №2.

  4. Использование потоков, вы можете многозадачно с ними.

  5. Имейте сервер загрузки, это может экономить память и потенциально экономить пропускную способность. Также он также позволяет пропустить отправку PDF из фляжки.

  6. Не используйте файлы PDF, если вам это не нужно.

  7. Используйте библиотеку, чтобы сделать это за вас.

Надеюсь, это поможет!

1

Я хотел поделиться своим решением с этим, но отдать должное @CoolqB за ответ. Ключ содержал 'rb' для правильного чтения двоичного файла и включая библиотеку codecs.Финальные фрагменты кода: запрос

  1. Клиент:

    response = requests.get('https://www.mywebsite.com/_api_call')

  2. Ответ сервера:

    f = codecs.open(file_name, 'rb').read() return f

  3. Клиент ручки:

    with codecs.open(file_to_write, 'w') as f: f.write(response.content) f.close()

И все в порядке с миром.

+0

Спасибо, кредит всегда хорош :) Я не думал об использовании кодеков Хорошая работа: D –