将byte [],file参数传递给方法java

时间:2017-05-20 16:50:52

标签: java methods

我对如何将字节数组和文件传递给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();
        } 

    }

1 个答案:

答案 0 :(得分:0)

查看enregistre方法的作用:

BufferedOutputStream stream;
stream = new BufferedOutputStream(new FileOutputStream(new File("ben1")));
stream.write(imgFile);
stream.close();

如果多次调用该方法,它将多次写入同一文件。没有任何意义 - 你最终会得到包含最后一次通话数据的文件。请注意,该方法不对数据库执行任何操作 - 它只是写入文件。您还没有向我们解释 写入数据库的代码在哪里,但可能是它在某个时候从该文件中读取。

(除此之外,该方法的第一个参数完全无用,因为您立即重新分配它。此代码在代码卫生方面存在一些严重问题,但我只关注您的要求。 )