1

我想要做的是使用 java 代码将一个简单的文本文件上传到 FTP 服务器,但出现错误。我正在努力使其工作,但无法做到这一点。下面是代码。

    File file = new File("testFile.txt");
    FileOutputStream fo = new FileOutputStream(file);
    PrintStream ps = new PrintStream(fo);
    ps.println("BLA");
    ps.close();`enter code here`
    fo.close();
uploadFile(file,file.getName());



public void upload( String ftpServer, String user, String password,
    String fileName, FileInputStream is ) throws MalformedURLException,
    IOException  

            {

        log("inside upload...........");
        if (ftpServer != null && fileName != null && is != null)
        {
            StringBuffer sb = new StringBuffer( "ftp://" );
            // check for authentication else assume its anonymous access. 
            if (user != null && password != null) 
            {
                sb.append( user );
                sb.append( ':' );
                sb.append( password ); 
                sb.append( '@' );
            }
            sb.append( ftpServer );
            sb.append( '/' );
            sb.append( fileName );
            /*
             * type ==> a=ASCII mode, i=image (binary) mode, d= file directory
             * listing
             */
            sb.append( ";type=i" );

            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try
            {
                URL url = new URL( sb.toString() );
                URLConnection urlc = url.openConnection();

                log("urlc::1 "+urlc);

                bos = new BufferedOutputStream( urlc.getOutputStream() );
                log("bos:: "+bos);

                bis = new BufferedInputStream( is );

                int i;
                // read byte by byte until end of stream
                while ((i = bis.read()) != -1)
                {
                    log("i"+i);
                    bos.write( i );
                }
            }
            finally
            {
                if (bis != null)
                    try
                {
                        bis.close();
                }
                catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
                if (bos != null)
                    try
                {
                        bos.close();
                }
                catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }
        }
        else
        {
            log( "Input not available." );
        }
            }

有关更多详细信息,我正在使用 java.net 导入。

我收到错误:

Exception e is :: java.io.IOException: illegal filename for a PUT
    at sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream(Unknown Source)
    at ToolFileUpload.upload(ToolFileUpload.java:72)
    at APInterfaceTool.uploadFile(APInterfaceTool.java:861)
    at APInterfaceTool.createInvoiceTextFile(APInterfaceTool.java:613)
    at APInterfaceTool.generateOutBoundExtract(APInterfaceTool.java:426)
4

2 回答 2

0

引发异常的代码FtpURLConnection.getOutputStream是:

decodePath(url.getPath());
if (filename == null || filename.length() == 0) {
    throw new IOException("illegal filename for a PUT");
}

如您所见,问题在于filename从 URL 中解析出来的组件为空或丢失。

最可能的原因是您为该upload方法提供了不适当的参数。不幸的是,您没有包含调用该方法的代码,所以我不能再进一步了。

于 2012-04-23T11:04:26.577 回答
0

您确定FileInputStream is调用函数时传递的参数不为空吗?

于 2012-04-23T11:30:30.153 回答