我对如何将字节数组和文件传递给Java中的方法感到困惑: 当我调用enregistre方法:enregistre(img3File,file3)和enregistre(img4File,file4)enregistre(img5File,file5)时,它不会将文件上传到数据库,但是当我在没有方法的情况下调用程序的一部分时(我重复一遍)代码用:img2File和file2)它工作,我不想重复代码5次,我相信有一个解决方案,请帮我弄清楚当我调用方法时出了什么问题。
@RequestMapping(value="/save",method=RequestMethod.POST)
public String add (
@RequestParam("photos") MultipartFile file,
@RequestParam("photos2") MultipartFile file2,
@RequestParam("photos3") MultipartFile file3,
@RequestParam("photos4") MultipartFile file4,
@RequestParam("photos5") MultipartFile file5)
{
byte[] img1File=null;
try {
//////////////////////// part1
img1File= file.getBytes();
BufferedOutputStream stream;
stream = new BufferedOutputStream(new FileOutputStream(new File("ben1")));
stream.write(img1File);
stream.close();
//////////////////// end part 1
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// here I repeat the code and I don t want to repeat it
byte[] img2File=null;
try {
//////////////////////// part 2
img2File= file2.getBytes();
BufferedOutputStream stream;
stream = new BufferedOutputStream(new FileOutputStream(new File("ben1")));
stream.write(img2File);
stream.close();
////////////////////////end part 2
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte[] img3File=null;
enregistre(img3File, file3);
byte[] img4File=null;
enregistre(img4File, file4);
byte[] img5File=null;
enregistre(img5File, file5);
Annonce annonce=new Annonce();
annonce.setPhotos(img1File);
annonce.setPhotos2(img2File);
annonce.setPhotos3(img3File);
annonce.setPhotos4(img4File);
annonce.setPhotos5(img5File);
annoncedao.save(annonce);
return "SuccessAddAnnonce";
// method
public void enregistre(byte[] imgFile,MultipartFile file)
{
try {
imgFile= file.getBytes();
BufferedOutputStream stream;
stream = new BufferedOutputStream(new FileOutputStream(new File("ben1")));
stream.write(imgFile);
stream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
查看enregistre
方法的作用:
BufferedOutputStream stream;
stream = new BufferedOutputStream(new FileOutputStream(new File("ben1")));
stream.write(imgFile);
stream.close();
如果多次调用该方法,它将多次写入同一文件。没有任何意义 - 你最终会得到包含最后一次通话数据的文件。请注意,该方法不对数据库执行任何操作 - 它只是写入文件。您还没有向我们解释 写入数据库的代码在哪里,但可能是它在某个时候从该文件中读取。
(除此之外,该方法的第一个参数完全无用,因为您立即重新分配它。此代码在代码卫生方面存在一些严重问题,但我只关注您的要求。 )