请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多线程上传文件第一次成功,第二次失败

    @RequestMapping(value = "upload", method = RequestMethod.POST)
    @ResponseBody
    public JsonMsgBean upload(
            HttpServletRequest request, HttpServletResponse response, Principal principal) throws Exception {
        MultipartRequest multipartRequest = (MultipartRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        List<Attach> retList = new ArrayList<Attach>();
        fileMap.values().forEach(attach -> {

                    String dir = "D:\\flows";
                    String fileName = attach.getOriginalFilename();
                    File file = new File(dir);
                    File[] files = file.listFiles(new FilenameFilter() {
                        @Override
                        public boolean accept(File dir, String name) {
                            return (name.endsWith("txt") || name.endsWith("log")) && !name.equals(fileName);
                        }
                    });

                    if (files != null && files.length > 0) {
                        String path = dir + File.separator + fileName;
                        if (files[0].renameTo(new File(path))) {
                            new Thread(()->{
                                OutputStream os=null;
                                InputStream is=null;
                                try {
                                    os = new FileOutputStream(path);
                                    is=attach.getInputStream();
                                  //  FileCopyUtils.copy(attach.getBytes(), os);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                } finally {
                                    if (os != null) {
                                        try {
                                            os.flush();
                                            os.close();
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                    if (is!=null){
                                        try {
                                            is.close();
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }
                            }).start();
                            
                        }


                    }
                }
        );
        return new JsonMsgBean(true, "200", retList);
    }

以上代码保证第一次上传成功,第二次是因为源文件不存在导致,确实是源文件不存在,但是源文件的目录是 C:\Users\Administrator\AppData\Local\Temp\,根本获不得上传文件的真实路径,如果想要多线程上传文件,有办法吗

正在回答

1回答

你好,这个貌似和多线程无关,就只是你的资源不能支持多次吧,你先解决了资源问题再看看

0 回复 有任何疑惑可以回复我~
  • 提问者 car #1
    谢谢,我换了一种写发。就是判断   byte[] bs=multipartFile.getBytes(); bs.length>0上传文件。这样能成功。不成功的文件我打印再次上传。
    回复 有任何疑惑可以回复我~ 2020-01-14 23:26:53
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号