Как получить реальный путь к файлу InputStream в Java Rest API - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть метод Post API Java Rest, который отправляет изображение (InputStream) в качестве параметра, и мне нужно сохранить его в столбце BLOB-объектов в Oracle.

Мне нужно получить полный путь (реальныйпуть) этого InputStream для сохранения этого изображения в базе данных. Мой код ниже.

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
                @FormDataParam("file") InputStream uploadedInputStream,
                @FormDataParam("file") FormDataContentDisposition fileDetail) {
String UPLOAD_FOLDER = "c:/uploadedFiles/"; // my rest api does not have this file, how to get at runtime?    
String uploadedFileLocation = UPLOAD_FOLDER + fileDetail.getFileName(); // this line is ok

Я хотел бы сделать что-то вроде этого:

String UPLOAD_FOLDER = uploadedInputStream.getRealPathName();

или

String UPLOAD_FOLDER = fileDetail.getRealPathName();

1 Ответ

0 голосов
/ 30 сентября 2019

Я решил проблему путем преобразования входного потока в байтовый массив. Я переправил byte [] в метод постоянства базы данных. Мой код ниже:

public byte[] toByteArray(InputStream is) throws IOException{
    ByteArrayOutputStream baus = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while((len= is.read(buffer)) != -1){
        baus.write(buffer, 0, len);
    }
    return baus.toByteArray();
}

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
                @FormDataParam("file") InputStream uploadedInputStream,
                @FormDataParam("file") FormDataContentDisposition fileDetail) {
    ...
    byte[] b = toByteArray(uploadedInputStream);
    business.saveUploadedFileInDatabase(b);
    ...
}

public boolean uploadFile(byte[] b) throws SQLException, IOException{
    ...
    PreparedStatement ps = conn.prepareStatement("INSERT INTO TABLE_IMAGE_TEST (CODE, IMAGE) VALUES (?, ?)");
    pstmt.setLong(1, 1L);
    pstmt.setBytes(2, b);
    pstmt.execute();
    ...
}
...