由于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...