Потоковая передача файла с одного веб-сервера на другойPython

Программы на Python
Anonymous
Потоковая передача файла с одного веб-сервера на другой

Сообщение Anonymous »

Я пытаюсь передать файл с одного веб-сервера (Jfrog) на другой (сервер контента Nexus).
У меня есть рабочий код, который делает это следующим образом:

Код: Выделить всё

def get_file():
url = "https://webserver.com/big_file.zip"
with requests.get(url,, stream=True) as file_stream:
self.stream_file_to_webserver(file_stream)

def stream_file_to_webserver(file_stream):
upload_url = "https://nexus.com/big_file.zip"
with requests.put(upload_url, data=file_stream.iter_content(chunk_size=8192), headers={'Content-Type': 'application/octet-stream'}) as response:
if response.status_code != 201:
print("Success")

Это работает нормально, но мне нужно загрузить контент на сервер Nexus в другом формате (из-за другой проблемы с отсутствием других полей метаданных при загрузке таким способом).Тут я хочу загрузить вот так:

Код: Выделить всё

import requests
from requests.auth import HTTPBasicAuth

class FileWrapper:
def __init__(self, file_iterator):
self.file_iterator = file_iterator

def read(self, size=-1):
return next(self.file_iterator, b'')

def get_file():
url = "https://webserver.com/big_file.zip"
with requests.get(url,, stream=True) as file_stream:
self.stream_file_to_webserver(file_stream)

def stream_file_to_webserver(source_response):
upload_url = f"https://nexus.com/repository"

file_wrapper = FileWrapper(source_response.iter_content(chunk_size=8192))

payload = {
'raw.directory': ('/'),
'raw.asset1.filename': ('big_file.zip'),
'raw.asset1': ('big_file.zip', file_wrapper)
}

with requests.post(upload_url, files=payload) as response:
if response.status_code == 201:
print("File uploaded to Nexus successfully.")
else:
print(f"Failed {response.text}")
Но, похоже, это не удалось, потому что полезная нагрузка почему-то установлена ​​неправильно.

Код: Выделить всё

 [{"id":"directory","message":"Missing required component field 'Directory'"},{"id":"filename","message":"Missing required asset field 'Filename' on '1'"},{"id":"filename","message":"Missing required asset field 'Filename' on '2'"},{"id":"filename","message":"Missing required asset field 'Filename' on '3'"},{"id":"*","message":"The assets 1 and 2 have identical coordinates"},{"id":"*","message":"The assets 2 and 3 have identical coordinates"}]
Кто-нибудь знает, что я делаю неправильно и как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/785 ... to-another

Вернуться в «Python»