java 将文件上传到服务器指定目录下 !!!!!!!!!!!!!!!!!!

时间:2021-05-01 12:16:10
先举例说明一下:  A为服务器       B为网络中任意一台机器(包括A).
我现在要将B上文件上传到A机器上.  这个怎么搞呢?(除FTP)
我查了不少资料.  看了以后   都是说上传功能  可是  没看到它要传到哪儿或者说没讲传到服务器上.

13 个解决方案

#1


能不能上传也要看人家是不是支持你上传,都能上传的话,病毒不是无处不在了?

#2


我只对我这个功能说 
    别太钻牛角尖
   我现在就是要做  把一个模块(打包后)   上传 到服务器指定目录下. 这个目录我到时候要写在程序里.就是写死了
.  就象    我上传个东西到新浪  上一样.   类似邮件附件一样  上传

#3


还是用JAVA实现FTP客户端吧,比较简单方便
如果你非得要那么做,你得在服务器上实现邮件服务器,外端实际就是要些个邮件的客户端

#4


这个问题你不能只站在 B 这边想。主要还是得站在 A 这边看看能提供什么样的上传方式,B 这边才好配合 A 这边进行操作。

如果 A 只提供一个 FTP 服务器,那 B 也只能实现一个 FTP 客户端,把文件上传过去。

如果 A 能提供一个 WEB 服务器,而且里面有一个 URL 能接收 POST 过来的文件,那你在 B 上边就可以做个 HTTP 客户端,把文件提交上去,或者,更常用的办法,由 A 再提供一个上载的页面。

如果你能在 A 上架设一个 SMTP 协议的文件接收器,那你就可以在 B 上用程序做个 SMTP 客户端,像发邮件一样把文件发送给 A。甚至直接用一个邮件客户端(比如 Outlook、Foxmail 什么的)发送文件。

……

你甚至可以在 A 和 B 上分别自己写一个 Socket 通信的程序,进行文件的传输(像飞鸽一样,hehe)

#5


如果 A 能提供一个 WEB 服务器,而且里面有一个 URL 能接收 POST 过来的文件,那你在 B 上边就可以做个 HTTP 客户端,把文件提交上去,或者,更常用的办法,由 A 再提供一个上载的页面。 
   你说的这个方法  是我想要的!    
  我们做的一个产品    我做这个功能的目的就是  要对系统进行远程更新!

#6


自己的贴  顶起去  直到有满意的

#7


用AXIS2可以简单的实现,Webservice的aar放到服务器,客户端通过service提供的URL上传

#8


看的我都有些迷糊了,这个应该是A的问题啊,就是一个文件上传的处理
只要A提供上传功能,连网的任何一台机器都能上传到A上

还是我什么地方没理解到,好象大家解释的很复杂的样子

举个例子,比如struts
客户端用<html:file name="UploadForm" property="file" />将文件上传
服务器端用FormFile接收,然后io写到服务器磁盘指定位置上,上传就完成了

不知道你说的是不是这个,是的话给你发些代码

#9


LS  谢谢    看一下你的代码   xql80329@163.com

#10


#11


前台就用我说的那个file标签提交就行了,下面是提交后向服务器指定位置写文件

public class Action extends BaseAction {
    private static final String UPLOAD_PATH = "D:\\upload\\";
    private static final int BUF_SIZE = 8192;

    public ActionForward upload(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        final UploadForm bodyForm = (UploadForm) form;
        final FormFile formFile = bodyForm.getFile();

        if (formFile.getFileSize() > 0) {
            boolean isUpload = uploadFile(formFile);
            System.out.println("upload complate is " + isUpload);
        }

        return mapping.findForward(FORWARD_SHOW);
    }

    private boolean uploadFile(FormFile formFile) throws FileNotFoundException,
            IOException {

        // 如果目录不存在,创建目录
        new File(UPLOAD_PATH).mkdirs();

        final File uploadFile = new File(UPLOAD_PATH, formFile.getFileName());

        // 如果文件已存在,将旧文件删除
        uploadFile.delete();

        final OutputStream outputStream = new FileOutputStream(uploadFile);
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
            bufferedInputStream = new BufferedInputStream(formFile.getInputStream());
            bufferedOutputStream = new BufferedOutputStream(outputStream);

            final byte temp[] = new byte[BUF_SIZE];
            int readBytes = 0;
            while ((readBytes = bufferedInputStream.read(temp)) != -1) {
                bufferedOutputStream.write(temp, 0, readBytes);
            }
            bufferedOutputStream.flush();

        } finally {
            if (bufferedOutputStream != null) {
                bufferedOutputStream.close();
            }
            if (bufferedInputStream != null) {
                bufferedInputStream.close();
            }
            formFile.destroy();
        }

        return true;

    }
}

#12


方法有几种
1 利用80端口,可以采用
 a) html upload, 用表单的形式。 此方法适合于用户自己亲自操作的情况。 
 b) URLConnection, 用A机器的程序实现,适合于2个机器都是服务器,需要服务器之间交换文件
 c) Web Service, 实质还是表单形式,但能规范操作

2 利用其它端口
 a) ftp 最简单,因为服务器端有现成的可用
 b) 其它协议,基本需要自己书写客户端和服务器端,比较麻烦,比如RMI/Socket
  

#13


see see!attention!

#1


能不能上传也要看人家是不是支持你上传,都能上传的话,病毒不是无处不在了?

#2


我只对我这个功能说 
    别太钻牛角尖
   我现在就是要做  把一个模块(打包后)   上传 到服务器指定目录下. 这个目录我到时候要写在程序里.就是写死了
.  就象    我上传个东西到新浪  上一样.   类似邮件附件一样  上传

#3


还是用JAVA实现FTP客户端吧,比较简单方便
如果你非得要那么做,你得在服务器上实现邮件服务器,外端实际就是要些个邮件的客户端

#4


这个问题你不能只站在 B 这边想。主要还是得站在 A 这边看看能提供什么样的上传方式,B 这边才好配合 A 这边进行操作。

如果 A 只提供一个 FTP 服务器,那 B 也只能实现一个 FTP 客户端,把文件上传过去。

如果 A 能提供一个 WEB 服务器,而且里面有一个 URL 能接收 POST 过来的文件,那你在 B 上边就可以做个 HTTP 客户端,把文件提交上去,或者,更常用的办法,由 A 再提供一个上载的页面。

如果你能在 A 上架设一个 SMTP 协议的文件接收器,那你就可以在 B 上用程序做个 SMTP 客户端,像发邮件一样把文件发送给 A。甚至直接用一个邮件客户端(比如 Outlook、Foxmail 什么的)发送文件。

……

你甚至可以在 A 和 B 上分别自己写一个 Socket 通信的程序,进行文件的传输(像飞鸽一样,hehe)

#5


如果 A 能提供一个 WEB 服务器,而且里面有一个 URL 能接收 POST 过来的文件,那你在 B 上边就可以做个 HTTP 客户端,把文件提交上去,或者,更常用的办法,由 A 再提供一个上载的页面。 
   你说的这个方法  是我想要的!    
  我们做的一个产品    我做这个功能的目的就是  要对系统进行远程更新!

#6


自己的贴  顶起去  直到有满意的

#7


用AXIS2可以简单的实现,Webservice的aar放到服务器,客户端通过service提供的URL上传

#8


看的我都有些迷糊了,这个应该是A的问题啊,就是一个文件上传的处理
只要A提供上传功能,连网的任何一台机器都能上传到A上

还是我什么地方没理解到,好象大家解释的很复杂的样子

举个例子,比如struts
客户端用<html:file name="UploadForm" property="file" />将文件上传
服务器端用FormFile接收,然后io写到服务器磁盘指定位置上,上传就完成了

不知道你说的是不是这个,是的话给你发些代码

#9


LS  谢谢    看一下你的代码   xql80329@163.com

#10


#11


前台就用我说的那个file标签提交就行了,下面是提交后向服务器指定位置写文件

public class Action extends BaseAction {
    private static final String UPLOAD_PATH = "D:\\upload\\";
    private static final int BUF_SIZE = 8192;

    public ActionForward upload(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        final UploadForm bodyForm = (UploadForm) form;
        final FormFile formFile = bodyForm.getFile();

        if (formFile.getFileSize() > 0) {
            boolean isUpload = uploadFile(formFile);
            System.out.println("upload complate is " + isUpload);
        }

        return mapping.findForward(FORWARD_SHOW);
    }

    private boolean uploadFile(FormFile formFile) throws FileNotFoundException,
            IOException {

        // 如果目录不存在,创建目录
        new File(UPLOAD_PATH).mkdirs();

        final File uploadFile = new File(UPLOAD_PATH, formFile.getFileName());

        // 如果文件已存在,将旧文件删除
        uploadFile.delete();

        final OutputStream outputStream = new FileOutputStream(uploadFile);
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
            bufferedInputStream = new BufferedInputStream(formFile.getInputStream());
            bufferedOutputStream = new BufferedOutputStream(outputStream);

            final byte temp[] = new byte[BUF_SIZE];
            int readBytes = 0;
            while ((readBytes = bufferedInputStream.read(temp)) != -1) {
                bufferedOutputStream.write(temp, 0, readBytes);
            }
            bufferedOutputStream.flush();

        } finally {
            if (bufferedOutputStream != null) {
                bufferedOutputStream.close();
            }
            if (bufferedInputStream != null) {
                bufferedInputStream.close();
            }
            formFile.destroy();
        }

        return true;

    }
}

#12


方法有几种
1 利用80端口,可以采用
 a) html upload, 用表单的形式。 此方法适合于用户自己亲自操作的情况。 
 b) URLConnection, 用A机器的程序实现,适合于2个机器都是服务器,需要服务器之间交换文件
 c) Web Service, 实质还是表单形式,但能规范操作

2 利用其它端口
 a) ftp 最简单,因为服务器端有现成的可用
 b) 其它协议,基本需要自己书写客户端和服务器端,比较麻烦,比如RMI/Socket
  

#13


see see!attention!