由于R&D中心需要把图纸上传到FTP服务器上,所以做了一个FTP方式的上传本地文件到FTP服务器的程序,程序做完但是出现了一些问题,贴出来大家讨论,以便给予本人解决。现谢谢各位的参与和恢复。

1、上传的文件名称为英文或数字时没有问题,但是当文件名为中文时,传到服务器上的文件中文名称部分就全变为了#号。

例如:本地文件名为:FILE123.TXT      上传到服务器上文件名称还是为:FILE123.TXT

本地文件名为:文件123.TXT       上传到服务器上文件名称变成了:###123.TXT

在调试跟中时走道CALL FUNCTION 'FTP_R3_TO_SERVER' 时,name2在系统中还是中文显示,

函数完成,程序结束,文件传到服务器上,名称变为#号。

2、如果服务器上存放文件的路径有中文,上传出现错误。

例如:服务器路径

保存文件/

第一种  filename  = '/SAVEFILE/FILE123.TXT'.

第二种 filename  = '/保存文件/FILE123.TXT'.

CONCATENATE  filename '' INTO name2.

这两种格式,第一种文件上传成功,第二种提示“FTP子命令:服务器报表错误”。

按照网上的提示把系统变量SAP_CODEPAGE 设置为 8400 等,都没有解决问题.

测试FTP 服务器为WIN2003 SERVER版,系统自带IIS设置.

DATA: hdl TYPE i,

key TYPE i VALUE 26101957,

dstlen TYPE i,

slen TYPE i,

blob_length TYPE i.

DATA filepath TYPE string .

DATA: BEGIN OF blob OCCURS 0,

line(100) TYPE x,

END OF blob.

DATA: result TYPE TABLE OF text WITH HEADER LINE.

DATA:filename1 TYPE string,

path TYPE string,

fullpath TYPE string.

PARAMETERS:

user(30) TYPE c LOWER CASE DEFAULT 'test',

pwd(30) TYPE c LOWER CASE DEFAULT 'test',

host(64) TYPE c LOWER CASE DEFAULT '172.16.0.128',

filename(80) TYPE c DEFAULT 'test.xls',

name2(80) TYPE c DEFAULT 'test.xls',

dest LIKE rfcdes-rfcdest DEFAULT 'SAPFTP'.

PARAMETERS: p_file LIKE rlgrap-filename   DEFAULT 'c:\test.xls'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_p_file USING p_file text-006.

START-OF-SELECTION.

*  CALL SCREEN 100.

*END-OF-SELECTION .

CALL 'AB_RFC_X_SCRAMBLE_STRING'

ID 'SOURCE'  FIELD pwd

ID 'KEY'  FIELD key

ID 'SCR'  FIELD 'X'

ID 'DESTINATION'  FIELD pwd

ID 'DSTLEN'  FIELD dstlen.

slen = STRLEN( pwd ).

CALL FUNCTION 'HTTP_SCRAMBLE'

EXPORTING

SOURCE      = pwd

sourcelen   = slen

key         = key

IMPORTING

destination = pwd.

CALL FUNCTION 'FTP_CONNECT'

EXPORTING

user            = user

password        = pwd

host            = host

rfc_destination = dest

IMPORTING

handle          = hdl.

filepath = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename   = filepath

filetype   = 'BIN'

IMPORTING

filelength = blob_length

TABLES

data_tab   = blob.

WRITE ''.

CALL FUNCTION 'CH_SPLIT_FILENAME'

EXPORTING

complete_filename = filepath

IMPORTING

name_with_ext     = name2.

WRITE: AT / 'Get ',p_file,' Length: ',blob_length.

CONCATENATE  filename '' INTO name2.

CALL FUNCTION 'FTP_R3_TO_SERVER'

EXPORTING

handle      = hdl

fname       = name2

blob_length = blob_length

TABLES

blob        = blob.

*  CALL FUNCTION 'FTP_COMMAND'

*    EXPORTING

*      handle   = hdl

*      command  = 'PUT'

*    IMPORTING

*      filesize = blob_length

*    TABLES

*      data     = blob.

WRITE: AT / 'Put ',name2.

CALL FUNCTION 'FTP_DISCONNECT'

EXPORTING

handle = hdl.

FORM get_p_file  USING    l_filename    l_text.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

def_filename     = space

def_path         = l_filename

mask             = ',*.dwg ,*.dwg.'

mode             = 'O'

title            = l_text

IMPORTING

filename         = l_filename

EXCEPTIONS

inv_winsys       = 04

no_batch         = 08

selection_cancel = 12

selection_error  = 16.

ENDFORM.                    " get_p_file*Text elements

*----------------------------------------------------------------------*

*  MODULE user_command_0100 INPUT

*----------------------------------------------------------------------*

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

CASE sy-ucomm.

WHEN 'EXIT'.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'

EXPORTING

window_title            = 'DWG引入'

default_extension       = 'DWG'

*   DEFAULT_FILE_NAME       = 'DWG'

*   WITH_ENCODING           =

*   FILE_FILTER             =

initial_directory       =  'C:\'

IMPORTING

filename                = filename1

path                    =  path

fullpath                =  fullpath

*   USER_ACTION             =

*   FILE_ENCODING           =

filename1 = fullpath.

ENDCASE.

CLEAR sy-ucomm.

ENDMODULE.                 " USER_COMMAND_0100  INP

遍历 FTP 文件 ,出现 中文 乱码 问题 建立 FTP 连接,遍历 文件 出现 中文 乱码 问题,是由于 FTP Server 协议里规定 文件名 编码是iso-8859-1,在登录之前先设置好编码格式为setControlEncoding("GBK");,这里使用的是apache common-net包,直接贴代码: package Test; import java.io.File; import java.io.IOException; import java.net.SocketException; import org. 首先我们引入commons-net依赖,这是个基于Socket的 ftp 依赖,API在 http://commons.apache.org/proper/commons-net/apidocs/index.html <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</versi FTP 上传文件 名称 中文 乱码 问题 思路:设置 ftp 支持UTF-8, ftp Client.sendCommand(“OPTS UTF8”, “ON”) 文件 上传 ftp服务器 之后, 中文名称 乱码 解决 办法 直接上代码 这个是我 Ftp Util工具类里的代码,直接 解决 问题,亲测有效 //本地字符编码 static String LOCAL_CHARSET = "UTF-8"; // FTP 协议里面,规定 文件名 编码为iso-8859-1 static String SER 这个问题是操作系统的字符编码和 ftp 的不一致造成的 windows常用的字符编码格式是GBK的, ftp 上使用的是utf-8的,所以, 解决 方法 为修改编码 // 处理创建 文件 中文 乱码 projectName=new String(projectName.getBytes("UTF-8"),"iso-8859-1");// 转换后的目录名或 文件名 ftp .makeDirectory( ftp _path+ File.separator + projectName); 核心就是目录或者 文件 夹 <br />编辑.bashrc 文件 <br />export  LANG=zh_CN.UTF-8;<br />export  LC_CTYPE="zh_CN.UTF-8";<br />export  LC_NUMERIC="zh_CN.UTF-8";<br />export  LC_TIME="zh_CN.UTF-8";<br />export  LC_COLLATE="zh_CN.UTF-8";<br />export  LC_MONETARY="zh_CN.UTF-8";<br />export  LC_ 使用 ftp lib连接 ftp 候,遇到 中文 路径报了错误UnicodeEncodeError: 'latin-1' codec can't encode charactersin position 4-5: ordinal not in range(256) 更改 ftp lib.py里 encoding ='latin-1' 借用了别人的c#代码做 ftp ,发现该 ftp 传输 文件 不能下载 中文名 文件 。服务器是linux服务器不识别 中文 ,客户端是win8。 这种问题是由客户端 中文 编码与服务器编码不一致造成的,要么让服务器识别 中文 编码,要么让客户端“聪明”些改 下载策略。 本人尝试前者数次,奈何水平不够,至今未能修改linux系统语言,只好尝试后者。 修改前该 ftp 调用 方法 如下: Ftp Web ftp = 由于R&D中心需要把图纸 上传 FTP服务器 上,所以做了一个 FTP 方式的 上传 本地 文件 FTP服务器 的程序,程序做完但是出现了一些问题,贴出来大家讨论,以便给予本人 解决 。现谢谢各位的参与和恢复。问题:1、 上传 文件名 称为英文或数字 没有问题,但是当 文件名 中文 ,传到服务器上的 文件 中文名称 部分就全 变为 了# 。例如:本地 文件名 为:FILE123.TXT 上传 到服务器上 文件名 称还是为:F...