Ich bin konfrontiert mit einem "HTTP 403 verboten" Fehler beim Versuch, PUT Anfrage einer erholsamen Ressource von einem eckigen Client zu verbrauchen. Ich habe diese erholsame Ressource mit Trikot erstellt und verwende Tomcat 7 als Anwendungsserver.HTTP 403 Verbotene Jersey auf Put Anfrage
Hier ist meine Ressource Code:
@Path("/doc")
public class DocResource {
@PUT
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("file/upload")
public Response uploadFile(MultipartBody body, @QueryParam("ID") long ID) {
try {
Attachment attachment = body.getAttachment("file");
MultivaluedMap<String, String> headers = attachment.getHeaders();
String fileName = getFileName(headers);
DataHandler dataHandler = attachment.getDataHandler();
InputStream inputStream = dataHandler.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] tmp = new byte[4096];
int ret = 0;
while ((ret = inputStream.read(tmp)) > 0) {
bos.write(tmp, 0, ret);
}
// TODO - Save contents as process attachment
byte[] contents = bos.toByteArray();
return Response.ok(getDocumentService().createAttachment(ID, fileName, contents, attachment.getContentType()), MediaType.APPLICATION_JSON).build();
} catch (Exception e) {
return handleException(e, "failed to upload Attachement");
}
}
}
Hier meine Winkel js
this.uploadFile = function uploadFile(callback, ID, file) {
var baseRestURL="http://localhost:8080/rest/doc"
// resource query
var query ;
// create form data
var formData = new FormData();
formData.append('file', file);
// set up the resource
var resource = $resource(baseRestURL + '/file/upload', {
ID: ID
}, {
'ID': ID,
'upload': {
method: 'PUT',
headers: {
'Content-Type': 'multipart/form-data'
}
}
});
resource.upload(query, formData).$promise.then(function success(response) {
if (callback) callback(response);
}, function error() {
//TODO handle error
});
};
Snippet ist möchte ich wie DELETE, Post, dass eine andere Art von http Anrufe bemerken und GET richtig funktionieren . Ich habe nur Probleme mit PUT-Anrufen.
Warum schreiben Sie 'Multipart/form-data' mit einem' PUT'? Es sollte stattdessen "POST" sein. –
Diese Put-Anfrage funktionierte und jetzt funktioniert sie nicht mehr. Ich möchte Ihre Aufmerksamkeit darauf lenken, dass alle Anfragen an diese Ressource nicht mehr funktionieren. Also, ich denke, dieses Problem hängt entweder mit einer Tomcat- oder Jersey-Ressourcenkonfiguration zusammen. –