public String uploadDicom(@RequestParam("file") MultipartFile file) {
// HDFS配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://your-hdfs-uri:9000");
// SequenceFile输出路径
Path seqFilePath = new Path("/path/to/your/sequencefile.seq");
// MapFile输出路径
Path mapFilePath = new Path("/path/to/your/mapfile.map");
FileSystem fs = null;
SequenceFile.Writer seqWriter = null;
MapFile.Writer mapWriter = null;
DicomInputStream dicomInputStream = null;
try {
// 获取HDFS文件系统
fs = FileSystem.get(conf);
// 创建SequenceFile writer
seqWriter = SequenceFile.createWriter(conf,
SequenceFile.Writer.file(seqFilePath),
SequenceFile.Writer.keyClass(Text.class),
SequenceFile.Writer.valueClass(BytesWritable.class));
// 创建MapFile writer
mapWriter = new MapFile.Writer(conf, fs, mapFilePath.toString(),
Text.class, BytesWritable.class);
// 读取接收到的DICOM文件
InputStream inputStream = file.getInputStream();
dicomInputStream = new DicomInputStream(inputStream);
Attributes dicomAttributes = dicomInputStream.readDataset(-1, -1);
// 获取序列号和检查号
String seriesInstanceUID = dicomAttributes.getString(Tag.SeriesInstanceUID);
String studyInstanceUID = dicomAttributes.getString(Tag.StudyInstanceUID);
// 将DICOM文件内容转换为字节数组
byte[] dicomBytes = dicomAttributes.toBytes(null);
// 写入SequenceFile
seqWriter.append(new Text(seriesInstanceUID), new BytesWritable(dicomBytes));
// 写入MapFile
mapWriter.append(new Text(studyInstanceUID), new BytesWritable(dicomBytes));
return "DICOM文件成功写入SequenceFile和MapFile";
} catch (IOException e) {
e.printStackTrace();
return "DICOM文件写入SequenceFile和MapFile失败:" + e.getMessage();
} finally {
try {
if (dicomInputStream != null) {
dicomInputStream.close();
}
if (seqWriter != null) {
seqWriter.close();
}
if (mapWriter != null) {
mapWriter.close();
}
if (fs != null) {
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}