मुझे लगता है कि इस तरह (सरलीकृत) लग रहा है एक फाइल अपलोड विधि के साथ एक जर्सी सेवा है:स्वैगर यूआई, जर्सी और फ़ाइल अपलोड को कॉन्फ़िगर कैसे करें?
@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...
}
यह काम करता है और मैं इसे सफलतापूर्वक क्रोम में डाकिया एक्सटेंशन का उपयोग कर परीक्षण कर सकते हैं।
हालांकि, स्वैगर "फ़ाइल" नामक 2 पैरामीटर देखता है। किसी भी तरह यह समझ में आता है कि InputStream
पैरामीटर और FormDataContentDisposition
पैरामीटर वास्तव में file
पैरामीटर के 2 भाग हैं, लेकिन यह FormDataBodyPart
पैरामीटर के लिए यह देखने में विफल रहता है।
इस पैरामीटर के लिए स्वैगर JSON है:
:parameters: [
{
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
}]
नतीजतन, स्वैगर यूआई एक फ़ाइल पिकर का क्षेत्र, और FormDataBodyPart तर्क के लिए एक अतिरिक्त पाठ क्षेत्र उत्पन्न करता है
तो जब मैं एक फ़ाइल चुनता हूं और स्वैगर यूआई में फॉर्म जमा करता हूं, तो मैं अपलोड की गई सामग्री की सामग्री के बजाय इनपुट फ़ील्ड में टेक्स्ट फ़ील्ड की सामग्री को पढ़ता हूं। और अगर मैं टेक्स्टफील्ड को खाली छोड़ देता हूं, तो मुझे फ़ाइल का नाम मिलता है।
मैं फॉर्मडाटा बॉडीपार्ट पैरामीटर को अनदेखा करने के लिए स्वैगर को कैसे निर्देश दे सकता हूं?
वैकल्पिक रूप से, काम के आसपास के रूप में, मैं FormDataBodyPart ऑब्जेक्ट के बिना अपलोड की गई फ़ाइल के मीडिया प्रकार को कैसे प्राप्त कर सकता हूं?
मैं जर्सी 2.7 और swagger-jersey2-jaxrs_2.10 संस्करण 1.3.4 का उपयोग करता हूं।
कोई भी जानता है कि यह फ़ाइल अपलोड जर्सी 1 के साथ संभव है या नहीं? (मैं 1.1 9 का उपयोग कर रहा हूं) किसी भी तरह से मैं फ़ाइल अपलोड करने के लिए फ़ाइल अपलोड नहीं कर सकता, भले ही मेरे पास मल्टीपार्ट/फॉर्म-डेटा है। पैरामीटर में भी इसे "बॉडी" के रूप में नहीं दिखाया जाता है "फ़ाइल" – dominicbri7