Как восстановить PDF-файл, который был передан с неправильным типом MIMEPython

Программы на Python
Ответить
Anonymous
 Как восстановить PDF-файл, который был передан с неправильным типом MIME

Сообщение Anonymous »

У меня есть сервис A (flask), который передает файл в сервис B (Django) с использованием библиотеки запросов Python.

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

from typing import TYPE_CHECKING
import magic

if TYPE_CHECKING:
from werkzeug.datastructures import FileStorage

from backendssc.access.viewer_context import ViewerContext

def multipartify(data: DictData, file: FileStorage) -> DictData:
converted = {}
for key, value in data.items():
converted[key] = (None, value)  # multipart representation of value

converted["file"] = (  # type: ignore
file.filename,
file.stream,
magic.from_buffer(file.read(2048), mime=True),
)
return converted

@retry_send_request()
def send_request(
method: str,
url: str,
queries: Optional[dict] = None,
body: Optional[dict] = None,
file: Optional[dict] = None,
api_token: Optional[str] = None,
jwt_token: Optional[str] = None,
extra_headers: Optional[Dict[str, Any]] = None,
tries: int = 1,
exp_backoff: int = 1,
) -> Response:
# Process header, queries and body
header = attach_api_auth_data(
url=url,
jwt_token=jwt_token,
api_token=api_token,
**(extra_headers if extra_headers else {}),
)

url = add_url_params(url, queries if queries else {})

response = requests.request(
method=method,
url=url,
json=body,
headers=header,
files=file,
)

return response

def create(
self,
*,
body: EvidenceLockerCreateRequestBody,
file: FileStorage,
viewer_context: ViewerContext,
raise_for_status: bool = False,
) -> Tuple[EvidenceLockerCreateApiResponse, bool]:
payload = multipartify(
data={
**body.as_dict(remove_null=True),
"ip_address": viewer_context.ip_address,
"user_agent": viewer_context.user_agent,
},
file=file,
)
response = send_request(
method="POST",
url=self.url,
file=payload,
jwt_token=viewer_context.jwt_token,
)
if raise_for_status:
response.raise_for_status()
return response.json(), response.ok
Если я удалю тип MIME из файла, т.е....

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

converted["file"] = (file.filename, file.stream)
...тогда файл можно будет без проблем загрузить обратно с s3.
Я пытаюсь восстановить файлы, которые были переданы с помощью MIME поэтому людям не нужно их перезагружать.
Я пробовал несколько разных библиотек/решений, таких как Convertapi, pikepdf, Ghostscript >, я люблю pdf (и ему подобные)... но пока не повезло.
Есть идеи?
Я пытался восстановить файлы. Я ожидаю помощи в восстановлении файлов.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -mime-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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