Ben bu (basitleştirilmiş) benzeyen bir dosya yükleme yöntemi ile bir Jersey hizmeti:Swagger UI, Jersey ve dosya yükleme nasıl yapılandırılır?
@POST
@Path("/{observationId : [a-zA-Z0-9_]+}/files")
@Produces({ MediaType.APPLICATION_JSON})
@Consumes(MediaType.MULTIPART_FORM_DATA)
@ApiOperation(
value = "Add a file to an observation",
notes = "Adds a file to an observation and returns a JSON representation of the uploaded file.",
response = ObservationMediaFile.class
)
@ApiResponses({
@ApiResponse(code = 404, message = "Observation not found. Invalid observation ID."),
@ApiResponse(code = 406, message= "The media type of the uploaded file is not supported. Currently supported types are 'images/*' where '*' can be 'jpeg', 'gif', 'png' or 'tiff',")
})
public RestResponse<ObservationMediaFile> addFileToObservation(
@PathParam("observationId") Long observationId,
@FormDataParam("file") InputStream is,
@FormDataParam("file") FormDataContentDisposition fileDetail,
@FormDataParam("fileBodyPart") FormDataBodyPart body
){
MediaType type = body.getMediaType();
//Validate the media type of the uploaded file...
if(/* validate it is an image */ ){
throw new NotAcceptableException("Not an image. Get out.");
}
//do something with the content of the file
try{
byte[] bytes = IOUtils.toByteArray(is);
}catch(IOException e){}
//return response...
}
O inşaat ve bunu başarıyla Chrome'da Postacı uzantısını kullanarak test edebilirsiniz. Bununla birlikte, Swagger "dosya" adlı 2 parametreyi görmektedir. Her nasılsa, InputStream
parametresi ve FormDataContentDisposition
parametresinin aslında aynı file
parametresinin 2 kısmı olduğunu anlıyor görünmektedir, ancak FormDataBodyPart
parametresi için bunu görememektedir.
Bu
parametreler için Swagger JSON geçerli: : Sonuç olarakparameters: [
{
name: "observationId",
required: true,
type: "integer",
format: "int64",
paramType: "path",
allowMultiple: false
},
{
name: "file",
required: false,
type: "File",
paramType: "body",
allowMultiple: false
},
{
name: "fileBodyPart",
required: false,
type: "FormDataBodyPart",
paramType: "form",
allowMultiple: false
}]
, Swagger UI FormDataBodyPart argüman için bir dosya seçici alanını ve ekstra bir metin alanını oluşturur
Bir dosya seçtiğimde ve formu Swagger UI'ye gönderdiğimde, yüklenen dosyanın içeriği yerine InputStream içindeki metin alanının içeriğini okuyorum. Ve eğer metin alanını boş bırakırsam, dosyanın adını alırım.
Swagger'ın FormDataBodyPart parametresini yoksaymasını nasıl önleyebilirim?
Alternatif olarak, bir çalışma çevresinde, yüklenen dosyanın ortam türünü FormDataBodyPart nesnesi olmadan nasıl edinebilirim?
Jersey 2.7 ve swagger-jersey2-jaxrs_2.10 sürüm 1.3.4 kullanıyorum.
Bu dosya yükleme jersey1 ile mümkün olup olmadığını bilen var mı? (1.19 kullanıyorum) Her nasılsa, çok parçalı/form vermeme sahip olmamasına rağmen, dosya yüklemesini işleyemiyorum. Ayrıca Parametreler içinde "gövde" olarak değil "dosya" olarak gösterilir – dominicbri7