可以用HttpClient把服务器获得的文件流再跨服务器转发到另外一个servlet上面再接收下载吗?

发布于 2021-11-25 07:38:27 字数 6703 浏览 788 评论 9

我用uploadify组件做了个文件从客户端上传到服务器的功能,但需求需要我把服务器获得的文件流不要保存到服务器本地直接转存到另外的一台文件服务器上面去。我在网上找了很久都没有这样的例子,请问这样的功能有可能实现吗?我看到网上有人说要把文件先保存到服务器本地,再用HttpClient读出来再转发到文件服务器上面的servlet上面接收,请问是不是一定要这么麻烦呢?求大神指点!

下面这是我在服务器上保存文件的代码,但是需求要我不要保存直接转发到其他服务器上面去:

    @RequestMapping(value="/uploadFile")   
    @SuppressWarnings("unchecked")
    public String uploadFile(HttpServletRequest req, Model model){
        boolean isMultipart = ServletFileUpload.isMultipartContent(req);   
        if (isMultipart) {
            String filePath = readproperties.get("infoPublishFilePath");
            File dirFile = new File(filePath);   
             if (!dirFile.exists()) {   
                dirFile.mkdirs();   
            }
            DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 10, new File(filePath));
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setHeaderEncoding("UTF-8");
            upload.setSizeMax(1024 * 1024 * 500);   // 设置允许上传的最大文件大小 500M
            List<FileItem> fileItems;
            try {
                FileItem fileData = null;
                fileItems = upload.parseRequest(req);
                Iterator<FileItem> iter = fileItems.iterator();
                String name = "";  
                String extName = "";  
                while (iter.hasNext()) {   
                     FileItem item = (FileItem) iter.next();   
                     if (!item.isFormField()) {  // 如果item是文件上传表单域  
                         fileData = item;
                         DateFormat df=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
                         String str=df.format(new Date());
                         name = str+item.getName();
                        // System.out.println("文件名11:"+name);
                         if (name.lastIndexOf(".") >= 0) {  
                                extName = name.substring(name.lastIndexOf("."));  
                            }  
                     }
                }
                if (fileData != null && !extName.equals("")) {
                    File fileOnServer = new File(filePath + name);   
                    fileData.write(fileOnServer);   
                    /*Account account = userService.findAccountByAccCode(accCode);
                    account.setPhotoRes(filePath + fileOnServer.getName());
                    userService.updateAccount(account);*/
                    log.info("文件" + fileOnServer.getName() + "上传成功");
                    model.addAttribute("baseUrl", filePath + name);
                    model.addAttribute("Message", "OK");
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return this.resolverViewName(req, "uploadFile");
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

半世蒼涼 2021-11-28 11:17:04

将文件服务器的磁盘mount到web服务器

猫九 2021-11-28 11:17:00

可以做代理

悟红尘 2021-11-28 11:16:54

引用来自“jobet”的评论

你的文件服务器用的是什么接口.是api接口.还是通过fuse,还是其他??

灵芸 2021-11-28 11:16:29

你的文件服务器用的是什么接口.是api接口.还是通过fuse,还是其他??

伴我心暖 2021-11-28 10:45:17

引用来自“jobet”的评论

可以实现.

InputStream is=fileItem.getInputStream();

然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把

凌乱心跳 2021-11-28 10:21:31

引用来自“jobet”的评论

可以实现.

InputStream is=fileItem.getInputStream();

然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把

拍不死你 2021-11-27 12:05:26

可以实现.

InputStream is=fileItem.getInputStream();

然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把

梅窗月明清似水 2021-11-26 08:13:36

顶一下,在线等

累赘 2021-11-26 05:24:49

其实你可以直接上传到文件服务器,只不过要注意跨域的问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文