.net - 如何将文件从 .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;
}
}
解决方案
推荐阅读
- python - 寻找非连续重复项的 Python 熊猫
- reactjs - 可使用 Webpack 4 和 Babel 7 进行反应加载
- python - 在通过组合旧数据结构的部分来构建数据结构时,Python 总是做浅拷贝吗?
- qt - 为什么在这种情况下会创建循环?
- oracle - 更改表 clg ADD CONSTRAINT UC_Person NOT NULL(AGE); 为什么我会收到错误消息?
- java - Spring 4 - 无法加载配置类
- python - 如何在 django 中使用 url 中的查询创建查询,并根据 url 返回过滤后的结果?
- javascript - vue 如何为嵌套对象设置默认道具
- python - Python jupyter notebook 更新错误
- python - Python RandomForest 分类器(如何测试它)