首页 > 解决方案 > 如何将文件从 .net 核心客户端上传到 .net 核心 API?我尝试从 .Net 客户端使用此 API,但出现超时异常或 Badrequest

问题描述

API方法

    [Route("~/api/[controller]/FileUpload")]
    public IActionResult FileUpload([FromForm] UploadModel UserId)
    {
        var userid = "*****";
        var pass = "******";
        try
        {
            using (FtpClient ftp = CreateFTPClient(userid, pass))
            {
                if (DoesFtpDirectoryExist("ftp://localhost:21" + "/" + UserId.UserId, userid, pass))
                {
                    if (CheckIfFileExistsOnServer(UserId.UserId,UserId.file.FileName ,userid, pass))
                    {
                        
                        FileInfo fi = new FileInfo(UserId.file.FileName) ;
                        string fname = fi.Name.Remove((fi.Name.Length - fi.Extension.Length));
                        fname = fname + System.DateTime.Now.ToString("_ddMMyyhhmmss") + fi.Extension;
                        var status = Upload(UserId.file.OpenReadStream(), UserId.UserId, userid, pass,fname);
                        return Ok("File already Exist... Please note renamed file name for your reference."+status+"");
                    }
                    else
                    {
                        var stream = UserId.file.OpenReadStream();
                        var status = Upload(stream, UserId.UserId, userid, pass, UserId.file.FileName);
                        return Ok(status);
                    }
                }
                else
                {
                    WebRequest request = WebRequest.Create("ftp://localhost:21" + "/" + UserId.UserId);
                    request.Method = WebRequestMethods.Ftp.MakeDirectory;
                    request.Credentials = new NetworkCredential(userid, pass);
                    using (var resp = (FtpWebResponse)request.GetResponse())
                    {
                        var stream = UserId.file.OpenReadStream();
                        var nameandext = UserId.file.FileName;
                        FtpWebRequest reqObj = (FtpWebRequest)WebRequest.Create("ftp://localhost:21" + "/" + UserId.UserId + "/" + nameandext);
                        var status = Upload(stream, UserId.UserId, userid, pass, UserId.file.FileName);
                        return Ok(status);
                    }
                }
            }
        }
        catch (Exception ex)
        {
           // BadRequest(ex.InnerException);
            throw ex;

        }
    }

客户端方法

    [HttpPost]
    public IActionResult Ftp( FileModel file)
    {
        try
        {
            string response = "";
            long totlength = file.MyFile.Length + file.Token.Length + file.userid.Length;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:49834/api/ftp/FileUpload");
            request.Method = "POST";
            request.ContentType = "multipart/form-data;boundary=gc0p4Jq0M2Yt08jU534c0p";
            
            request.ContentLength = totlength;
            request.Headers["Authorization"] = "Bearer " + file.Token + "";
            StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
            requestWriter.Write(file);
            requestWriter.Close();
            request.Timeout = 200000;
            WebResponse webResponse = request.GetResponse();
            Stream webStream = webResponse.GetResponseStream();
            StreamReader responseReader = new StreamReader(webStream);
            response = responseReader.ReadToEnd();
            return Ok();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        
    }

标签: .netapiasp.net-core.net-coreasp.net-core-webapi

解决方案


推荐阅读