2017-06-25 5 views
1

Ich versuche, eine Datei-Upload-REST-API über Spring Boot einzurichten.Upload auf Amazon S3 über Curl-Route

Ich habe derzeit eine Liste/GET-Methode curl http://localhost:8080/api/aws/s3/list, die eine Liste der Objekte zurückgibt, die derzeit im Bucket vorhanden sind.

für den Upload, ich habe versucht:

curl -F "[email protected]" http://localhost:8080/api/aws/s3/upload -i 

Welche produziert:

HTTP/1.1 100 Continue 

HTTP/1.1 200 OK 
Date: Sun, 25 Jun 2017 23:28:36 GMT 
X-Application-Context: application 
Content-Type: application/json;charset=utf-8 
Transfer-Encoding: chunked 

Aber wenn ich auf dem heißen Stein aussehen, es ist nicht mit der neuen Datei aktualisiert.

Wäre dies ein Berechtigungsproblem bei AWS? Nur mein Konto hat Lese- und Schreibzugriff. Der Benutzer und die Gruppe, die ich erstellt habe, haben Administratorrechte. Ich habe keine Bucket-Richtlinie hinzugefügt. Dies ist meine CORS-Konfiguration:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

Hier ist der Upload-Abschnitt meines S3-Controller im Frühjahr:

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public List<PutObjectResult> upload(@RequestParam("file") MultipartFile[] multipartFiles) { 
    return s3Wrapper.upload(multipartFiles); 
} 

Antwort

3

Sie sollten Ihren Bucketnamen und einige Parameter für S3 angeben. Und ich denke, es ist PUT, nicht POST. Es gibt mehrere Befehlszeilen-Beispiele im Internet.

file=/path/to/file/to/upload.tar.gz 
bucket=your-bucket 
resource="/${bucket}/${file}" 
contentType="application/x-compressed-tar" 
dateValue=`date -R` 
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}" 
s3Key=xxxxxxxxxxxxxxxxxxxx 
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64` 
curl -X PUT -T "${file}" \ 
    -H "Host: ${bucket}.s3.amazonaws.com" \ 
    -H "Date: ${dateValue}" \ 
    -H "Content-Type: ${contentType}" \ 
    -H "Authorization: AWS ${s3Key}:${signature}" \ 
    https://${bucket}.s3.amazonaws.com/${file} 
0

Es war, weil der Parameter ich in meinem Controller gesetzt file war aber in meiner curl Route I Verwendung data

Verwandte Themen