java - 如何在 Java Rest API 中获取真实路径 InputStream 文件
问题描述
我有一个 Java Rest API Post 方法,它发送一个图像(InputStream)作为参数,我必须将它保存在 Oracle 的一个 blob 列中。
我需要获取此 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();
解决方案
我通过将输入流转换为字节数组解决了这个问题。我将 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();
...
}
推荐阅读
- asp.net - 外键、预加载和 DTO(.NET Core 3.1 / Entity Framework Core)
- javascript - 我怎样才能在一个块中找到正确的索引,只知道块索引?
- java - 使用 jooq 进行多个连接
- angular - 扩展点或从 Liquid 模板访问 OpenApiDocument
- powershell - PowerBi 内所有工作区和用户的列表 - 新手问题
- r - 计算加权平均值时出错:“x”和“w”必须具有相同的长度
- docker - 使用 Docker 在目标 windows 服务器中创建分区驱动器 E
- java - 比较2个excel文件大数据写入结果与Highlight cellstyle sxssf JAVA
- asp.net-mvc - 更新列表 Aspnet core 2.2
- python - 为 x 和 y 坐标和时间戳的 panda 数据帧创建多索引