上传大文件到ftp C# [英] Upload large file to ftp C#

查看:133
本文介绍了上传大文件到ftp C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


$ b

代码



使用此代码将大文件上传到ftp站点。 使用(FileStream fs = new FileStream(FileLoc,FileMode.Open,FileAccess.Read))
{
string ftpUrl = string.Format({0} / {1} ,uploadUrl,uploadFileName);
FtpWebRequest requestObj = FtpWebRequest.Create(ftpUrl)as FtpWebRequest;
requestObj.Method = WebRequestMethods.Ftp.UploadFile;
requestObj.Credentials = new NetworkCredential(Uid,Pass);
using(Stream requestStream = requestObj.GetRequestStream())
{

byte [] buffer = new byte [8092];
int read = 0; $(读取= fs.Read(buffer,0,buffer.Length))!= 0)
{
requestStream.Write(buffer,0,read);
}

requestStream.Flush();
if(fs!= null)
{
fs.Close();
fs.Dispose();
}
if(requestStream!= null)
{
requestStream.Close();
requestStream.Dispose();



$ / code $ / pre

有些时候, lode文件非常好,但有一段时间它 - 指示文件的一部分不完整的文件,并没有给出任何错误。



任何人可以帮助我为什么有一段时间它只上传文件的一部分而不是漏洞文件。

解决方案

这里是我们用来上传到FTP的代码。它看起来与你自己非常相似。 Nevertheleess,我张贴它作为参考,因为我们还没有任何这样的报告失败

  private void UploadFile(string fileToUpload)
{
Output = new Uri(Path.Combine(Output.ToString(),Path.GetFileName(fileToUpload)));
FtpWebRequest请求= WebRequest.Create(输出)作为FtpWebRequest;
request.Method = WebRequestMethods.Ftp.UploadFile;
//为了使用Microsoft Windows Server 2003 + IIS,我们不能使用被动模式。
request.UsePassive = false;
request.Credentials = new NetworkCredential(username,password);

//将文件的内容复制到请求流中。
Stream dest = request.GetRequestStream();
FileStream src = File.OpenRead(fileToUpload);

int bufSize =(int)Math.Min(src.Length,1024);
byte [] buffer = new byte [bufSize];
int bytesRead = 0;

int numBuffersUploaded = 0;

do
{
bytesRead = src.Read(buffer,0,bufSize);
dest.Write(buffer,0,bufSize);
numBuffersUploaded ++;
}
while(bytesRead!= 0);

dest.Close();
src.Close();

FtpWebResponse response =(FtpWebResponse)request.GetResponse();
if(response.StatusCode!= FtpStatusCode.ClosingData)
{
Console.Error.WriteLine(请求{0}:将文件上传到FTP服务器时出错:{1}({2} ),Id,response.StatusDescription,response.StatusCode);


{
Console.Out.WriteLine(请求{0}:成功传输文件到{1},Id,Output.ToString());
}
}


I'm uploading large files to ftp site using this code.

Code

using (FileStream fs = new FileStream(FileLoc, FileMode.Open, FileAccess.Read))
            {
                string ftpUrl = string.Format("{0}/{1}", uploadUrl, uploadFileName);
                FtpWebRequest requestObj = FtpWebRequest.Create(ftpUrl) as FtpWebRequest;
                requestObj.Method = WebRequestMethods.Ftp.UploadFile;
                requestObj.Credentials = new NetworkCredential(Uid, Pass);
                using (Stream requestStream = requestObj.GetRequestStream())
                {

                    byte[] buffer = new byte[8092];
                    int read = 0;

                    while ((read = fs.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        requestStream.Write(buffer, 0, read);
                    }

                    requestStream.Flush();
                    if (fs != null)
                    {
                        fs.Close();
                        fs.Dispose();
                    }
                    if (requestStream != null)
                    {
                        requestStream.Close();
                        requestStream.Dispose();
                    }
                }
            }

Some times this code up-lode files very fine but some time it up-lodes some part of file not complete file and doesn't give any error.

Can any one help me why some time it upload only some part of file not hole file.

解决方案

Here's the code we use for uploading to FTP. It looks very similar to your own. Nevertheleess, I post it for your reference as we haven't had any such reported failures

    private void UploadFile(string fileToUpload)
    {
        Output = new Uri(Path.Combine(Output.ToString(), Path.GetFileName(fileToUpload)));
        FtpWebRequest request = WebRequest.Create(Output) as FtpWebRequest;
        request.Method = WebRequestMethods.Ftp.UploadFile;
        // in order to work with Microsoft Windows Server 2003 + IIS, we can't use passive mode.
        request.UsePassive = false;
        request.Credentials = new NetworkCredential(username, password);

        // Copy the contents of the file to the request stream.
        Stream dest = request.GetRequestStream();
        FileStream src = File.OpenRead(fileToUpload);

        int bufSize = (int)Math.Min(src.Length, 1024);
        byte[] buffer = new byte[bufSize];
        int bytesRead = 0;

        int numBuffersUploaded = 0;            

        do
        {
            bytesRead = src.Read(buffer, 0, bufSize);
            dest.Write(buffer, 0, bufSize);
            numBuffersUploaded++;
        }
        while (bytesRead != 0);

        dest.Close();
        src.Close();

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        if (response.StatusCode != FtpStatusCode.ClosingData)
        {
            Console.Error.WriteLine("Request {0}: Error uploading file to FTP server: {1} ({2})", Id, response.StatusDescription, response.StatusCode);
        }
        else
        {
            Console.Out.WriteLine("Request {0}: Successfully transferred file to {1}", Id, Output.ToString());
        }
    }

这篇关于上传大文件到ftp C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆