上传文件到http服务器上

思路:Apache http server安装完成后,在本地有存放路径Apache2.2\htdocs,如今的需求是经过程序将文件上传到远程服务器的http服务器上,因此就不能直接用本地路径了,java

解决方法是在远程服务器搭建ftp服务,将ftp的路径设置为http服务器的存放路径(htdocs)(注:http服务器不要放在c盘,我这边放c盘,ftp就存不进去),这样经过程序将文件上传到ftp上,就能够经过http地址获取到了。web

具体java实现ftp上传百度有不少。须要下载的commons-net-3.4.jarapache


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class FileTool {
    /**
     * Description: 向FTP服务器上传文件
     * @Version      1.0
     * @param url FTP服务器hostname
     * @param port  FTP服务器端口
     * @param username FTP登陆帐号
     * @param password  FTP登陆密码
     * @param path  FTP服务器保存目录
     * @param filename  上传到FTP服务器上的文件名
     * @param input   输入流
     * @return 成功返回true,不然返回false *
     */
    public static boolean uploadFile(String url,// FTP服务器hostname
            int port,// FTP服务器端口
            String username, // FTP登陆帐号
            String password, // FTP登陆密码
            String path, // FTP服务器保存目录
            String filename, // 上传到FTP服务器上的文件名
            InputStream input // 输入流
    ){
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("UTF-8");
        try {
            int reply;
            ftp.connect(url, port);// 链接FTP服务器
            // 若是采用默认端口,能够使用ftp.connect(url)的方式直接链接FTP服务器
            ftp.login(username, password);// 登陆
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.enterLocalPassiveMode();
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(path);
            ftp.changeWorkingDirectory(path);
            ftp.storeFile(filename, input);
            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }
    /**
     * 将本地文件上传到FTP服务器上 *
     */
    public static void upLoadFromProduction(String url,// FTP服务器hostname
            int port,// FTP服务器端口
            String username, // FTP登陆帐号
            String password, // FTP登陆密码
            String path, // FTP服务器保存目录
            String filename, // 上传到FTP服务器上的文件名
            String orginfilename // 输入流文件名
       ) {
        try {
            FileInputStream in = new FileInputStream(new File(orginfilename));
            boolean flag = uploadFile(url, port, username, password, path,filename, in);
            System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     //测试
    public static void main(String[] args) {
        upLoadFromProduction("192.168.8.141", 21, "zfx", "zfx", "avatar", "b.jpg", "d:\\b.jpg");
    }
}windows

代码是别人的。服务器




期间apache http服务器忽然起不来了,弹出the requested operation has failed的错误提示,缘由是我配置了ftp,其中iis中网站里有个默认配置default web server端口默认也是80,因此端口就被占用了,解决办法,中止default web server或者修改下端口便可。iis打开方式:windows键---搜索程序和文件中输入internet---点击iis。
测试