代码语言:javascript复制个人分享
public void test()
{
//ftp服务器路径
string ftpServer = "ftp://192.168.0.1/";
//ftp本地路径
string ftpDefaultUrl = "/A";
//登入到ftp的账号
string ftpUserName = "anonymous";
//登入到ftp的密码
string ftpUserPwd = "";
//下载后的文件存放路径
string downloadUrl = @"D:";
//需要下载的文件名
string fileName = "ip.txt";
//需要现在的文件在ftp上的完整路径
string fileUploadPath = ftpServer ftpDefaultUrl;
Uri uri = new Uri(fileUploadPath "/" fileName);
//下载后存放的路径
string FileName = Path.GetFullPath(downloadUrl) Path.DirectorySeparatorChar.ToString() Path.GetFileName(uri.LocalPath);
//创建文件流
FileStream fs = null;
Stream responseStream = null;
try
{
//创建一个与FTP服务器联系的FtpWebRequest对象
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
//设置请求的方法是FTP文件下载
request.Method = WebRequestMethods.Ftp.DownloadFile;
//连接登录FTP服务器
request.Credentials = new NetworkCredential(ftpUserName, ftpUserPwd);
//获取一个请求响应对象
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
//获取请求的响应流
responseStream = response.GetResponseStream();
//判断本地文件是否存在,如果存在,则打开和重写本地文件
if (File.Exists(FileName))
{
fs = File.Open(FileName, FileMode.Open, FileAccess.ReadWrite);
}
else
{
fs = File.Create(FileName);
}
if (fs != null)
{
int buffer_count = 65536;
byte[] buffer = new byte[buffer_count];
int size = 0;
while ((size = responseStream.Read(buffer, 0, buffer_count)) > 0)
{
fs.Write(buffer, 0, size);
}
fs.Flush();
fs.Close();
responseStream.Close();
}
}
finally
{
if (fs != null)
fs.Close();
if (responseStream != null)
responseStream.Close();
}
}
实例以金蝶云星空举例,部分代码按个人需求来改,具体部分看注释
代码语言:javascript复制//<summary>
//上传附件,并保存于单据关联关系。
//</summary>
public void Upload()
{
//上传附件至当前启用的文件服务实例。
string filePath = @"D:ip.txt"; //测试用附件地址。
FileUploadResult uploadResult = UploadAttachment(filePath);
//此处以金蝶云星空币别为例,按个人需求来配置。
SaveAttachmentData(uploadResult);
}
//<summary>
//上传附件,返回上传结果。
//</summary>
//<param name="filePath">应用服务器下测试文件路径。</param>
//<returns>返回上传结果。</returns>
private FileUploadResult UploadAttachment(string filePath)
{
FileUploadResult uploadResult = new FileUploadResult();
long blockSize = 1024 * 1024; //分块上传大小。
string fileName = Path.GetFileName(filePath);
//获取上传下载服务。
IUpDownloadService service = FileServiceContainer.GetUpDownloadService();
TFileInfo tFile = new TFileInfo()
{
FileId = string.Empty, //文件编码。
FileName = fileName, //文件名。
CTX = this.Context, //登录上下文环境。
};
using (FileStream fsRead = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
if (fsRead.Length <= 0) return uploadResult;
while (true)
{
//放里面声明,第一次填入完整字节数据,第二次若只填充一部分,此时后面的直接数组并不会被清空。
byte[] content = new byte[blockSize];
int size = fsRead.Read(content, 0, content.Length);
if (size == 0) break;
//不相等时说明已经是最后一次上传,也可能文件大小刚好等于1M,后面再读时size为0,不会再次上传。
tFile.Last = (size != blockSize);
tFile.Stream = new MemoryStream(content, 0, size);
uploadResult = service.UploadAttachment(tFile);
_fileId = tFile.FileId = uploadResult.FileId;
if (!uploadResult.Success || tFile.Last) break;
}
}
return uploadResult;
}
金蝶云星空相关代码
代码语言:javascript复制private void SaveAttachmentData(FileUploadResult uploadResult)
{
//构建附件明细实体数据包。
FormMetadata meta = FormMetaDataCache.GetCachedFormMetaData(this.Context, FormIdConst.BOS_Attachment);
DynamicObject dynObj = new DynamicObject(meta.BusinessInfo.GetDynamicObjectType());
dynObj["BillType"] = "BD_Currency"; //业务单据唯一标识:此处关联币别。
dynObj["InterID"] = 1; //业务单据内码:此处上传至人民币,内码为1。
dynObj["BillNo"] = "PRE001"; //业务单据编码:此处上传至人民币,编码为PRE001。
dynObj["EntryKey"] = " "; //关联实体标识:单据头为空格,单据体则填单据体标识。
dynObj["EntryInterID"] = -1; //单据体内码:单据头为-1,单据体则填单据体内码。
dynObj["FileId"] = uploadResult.FileId; //文件编码:上面上传成功拿到文件编码。
dynObj["FileStorage"] = "1"; //存储类型:1为文件服务器、2为亚马逊云存储、3为金蝶·个人云存储、4为金蝶·企业云存储。
dynObj["AttachmentName"] = uploadResult.FileName; //附件名。
dynObj["ExtName"] = Path.GetExtension(uploadResult.FileName); //文件后缀名。
dynObj["AttachmentSize"] = Math.Round(uploadResult.FileSize * 1.0 / 1024, 2); //附件大小,单位为KB。
dynObj["FBillStatus"] = "A"; //单据状态:给默认值A即可。
dynObj["AliasFileName"] = ""; //别名。
dynObj["IsAllowDownLoad"] = false; //是否禁止下载:false代表允许下载。
dynObj["CreateMen_Id"] = this.Context.UserId; //创建人。
dynObj["CreateTime"] = DateTime.Now; //创建时间。
dynObj["ModifyMen_Id"] = this.Context.UserId; //修改人。
dynObj["ModifyTime"] = DateTime.Now; //修改时间。
//调用保存接口。
dynObj = BusinessDataServiceHelper.Save(this.Context, dynObj);
}
private string _fileId = string.Empty;
}