Skip to content

Instantly share code, notes, and snippets.

@itarocha
Created April 23, 2023 15:02
Show Gist options
  • Save itarocha/dbf36e36994058fae5c69d3d4808256b to your computer and use it in GitHub Desktop.
Save itarocha/dbf36e36994058fae5c69d3d4808256b to your computer and use it in GitHub Desktop.
Upload multipart from aws json event and reposting to spring boot rest application
{
"resource": "/create",
"path": "/create",
"httpMethod": "POST",
"headers": {
"Accept": "*/*",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": true,
"CloudFront-Is-Mobile-Viewer": false,
"CloudFront-Is-SmartTV-Viewer": false,
"CloudFront-Is-Tablet-Viewer": false,
"CloudFront-Viewer-ASN": "53006",
"CloudFront-Viewer-Country": "BR",
"content-type": "multipart/form-data; boundary=X-INSOMNIA-BOUNDARY",
"Host": "zz1myt8fmb.execute-api.sa-east-1.amazonaws.com",
"User-Agent": "insomnia/2023.1.0",
"Via": "2.0 6f6cfad7cbccfc294ba741d88889e5f6.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "6-mVyvqSUhZ36XpY9U6JYUKo9ejZExBHujpC9CnIx1bcjx-z5aW-Rg==",
"X-Amzn-Trace-Id": "Root=1-6440b007-4f2129577c3b3f033b83758e",
"X-Forwarded-For": "191.54.174.165, 130.176.164.190",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"multiValueHeaders": {
"Accept": [
"*/*"
],
"CloudFront-Forwarded-Proto": [
"https"
],
"CloudFront-Is-Desktop-Viewer": [
true
],
"CloudFront-Is-Mobile-Viewer": [
false
],
"CloudFront-Is-SmartTV-Viewer": [
false
],
"CloudFront-Is-Tablet-Viewer": [
false
],
"CloudFront-Viewer-ASN": [
"53006"
],
"CloudFront-Viewer-Country": [
"BR"
],
"content-type": [
"multipart/form-data; boundary=X-INSOMNIA-BOUNDARY"
],
"Host": [
"zz1myt8fmb.execute-api.sa-east-1.amazonaws.com"
],
"User-Agent": [
"insomnia/2023.1.0"
],
"Via": [
"2.0 6f6cfad7cbccfc294ba741d88889e5f6.cloudfront.net (CloudFront)"
],
"X-Amz-Cf-Id": [
"6-mVyvqSUhZ36XpY9U6JYUKo9ejZExBHujpC9CnIx1bcjx-z5aW-Rg=="
],
"X-Amzn-Trace-Id": [
"Root=1-6440b007-4f2129577c3b3f033b83758e"
],
"X-Forwarded-For": [
"191.54.174.165, 130.176.164.190"
],
"X-Forwarded-Port": [
"443"
],
"X-Forwarded-Proto": [
"https"
]
},
"queryStringParameters": null,
"multiValueQueryStringParameters": null,
"pathParameters": null,
"stageVariables": null,
"requestContext": {
"resourceId": "7ow0pa",
"resourcePath": "/create",
"httpMethod": "POST",
"extendedRequestId": "DqBxKGhTGjQFupA=",
"requestTime": "20/Apr/2023:03:22:47 +0000",
"path": "/Prod/create",
"accountId": "085466734908",
"protocol": "HTTP/1.1",
"stage": "Prod",
"domainPrefix": "zz1myt8fmb",
"requestTimeEpoch": 1681960967182,
"requestId": "10173d9b-402e-4cf2-8de6-7211b1a787f9",
"identity": {
"cognitoIdentityPoolId": null,
"accountId": null,
"cognitoIdentityId": null,
"caller": null,
"sourceIp": "191.54.174.165",
"principalOrgId": null,
"accessKey": null,
"cognitoAuthenticationType": null,
"cognitoAuthenticationProvider": null,
"userArn": null,
"userAgent": "insomnia/2023.1.0",
"user": null
},
"domainName": "zz1myt8fmb.execute-api.sa-east-1.amazonaws.com",
"apiId": "zz1myt8fmb"
},
"body": "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",
"isBase64Encoded": true
}
import json
import io
import base64
import uuid
import requests
from multipart import MultipartParser, MultipartPart
tipos = {
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx",
"application/vnd.ms-excel": "xls",
"application/json": "json",
}
def build_part(part: MultipartPart):
tipo = tipos.get(part.content_type)
if tipo:
save_to_file(part, tipo)
# files = ('file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel'))
return part.name, (part.name, part.raw, part.content_type) # deve ser tuple, não dict!
def save_to_file(part: MultipartPart, extensao):
nomearquivo = str(uuid.uuid1())
filename = './arquivos/' + nomearquivo + '.' + extensao
with open(filename, 'wb') as fd:
fd.write(part.raw)
def describe_part(part: MultipartPart):
# print(part.value)
print("***** Conteúdo:")
print(f'part.name: "{part.name}"')
print(f'part.file: "{part.file}"')
print(f'part.content_type: "{part.content_type}"')
print(f'part.charset: "{part.charset}"')
print(f'part.size: {part.size} bytes')
print(f'part.options: "{part.options}"')
print(f'part.headers: {part.headers}')
# part.save_as(part.name + ".bin")
# print(part.value)
if __name__ == "__main__":
with open('event_multipart.json') as f:
data = f.read()
event = json.loads(data)
multipart_data = event.get("body")
decoded = base64.b64decode(multipart_data)
content_type = event['headers']['content-type']
boundary = content_type.split(";")[1].split("=")[1].encode('utf-8')
parts = MultipartParser(io.BytesIO(decoded), boundary)
multiple_files = []
for part in parts:
multiple_files.append(build_part(part))
describe_part(part) # apenas descritivo
url = 'http://localhost:8080/arquivo/upload'
headers = {'x-itamar-correlationID': '202314887'}
r = requests.post(url, headers=headers, files=multiple_files)
# 'Content-Type': 'multipart/form-data; boundary=3131623adb2043caaeb5538cc7aa0b3a',
print(f'retorno: {r.status_code}')
package com.example.multipart.controller;
import lombok.SneakyThrows;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
@RestController
@RequestMapping("/arquivo")
public class MultipartController {
@PostMapping(consumes = {MULTIPART_FORM_DATA_VALUE, APPLICATION_JSON_VALUE}, path = "/upload")
@ResponseStatus(HttpStatus.CREATED)
public void upload(@RequestHeader(name = "x-itamar-correlationID") String correlationId,
@RequestPart(name = "arquivo") MultipartFile arquivo,
@RequestPart(name = "cliente") ClienteRequest clienteRequest){
System.out.println(arquivo.getContentType());
System.out.println(arquivo.getOriginalFilename());
System.out.println(clienteRequest.getId());
System.out.println(clienteRequest.getNome());
saveFile(arquivo);
}
@SneakyThrows
void saveFile(MultipartFile file){
String fileName = UUID.randomUUID().toString();
File convFile = new File("/home/itamar/projetos_python/sam-app-hello/interno/arquivos/"+fileName);
try {
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close(); //IOUtils.closeQuietly(fos);
} catch (IOException e) {
convFile = null;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment