.Net C#向远程服务器Api上传文件
2021-06-07 05:03
标签:soft ipa limits close serialize dir pen local 改进 Api服务代码一: Api服务代码二: Ajax提交file代码,调用Api代码一的Script: 此方法后端Api代码一中始终获取不到文件名,所以我在Ajax的url中加了?fileName=fileObj.name,这样调试能走通。为什么Ajax提交时不能获取到文件名,我还在研究。 Ajax提交file代码,调用Api代码一的Html: Form表单提交Post到远程Api代码二中,这个很顺利。下边是Html Api服务部署时需要考虑到客户端提交file时有跨域问题,快捷方法是在IIS中设置Access-Control-Allow-Origin:*,但这样做有安全问题。 网站上传文件大小默认4M,所以网站配置文件中需要设置,如下: 服务器IIS上传文件大小也有限制,也要做设置,如下: 以上是我近2天的研究成果,不算完善还需要改进。 Api中使用了三方框架RestSharp,请在解决方案中找NuGet添加。 外部操作类用到的方法有,一: 注意:Html代码中file控件需要有name=“file”属性,否则提交后Api获取不到file对象,如下。 第三种方法是form表单提交调用mvc的control,control在调用Api代码二,这个测试失败,能上传文件,但上传的文件不能打开是损坏的,正在想办法解决。 下边是第三种方法的Html代码: 下边是第三种方法的Control代码: .Net C#向远程服务器Api上传文件 标签:soft ipa limits close serialize dir pen local 改进 原文地址:https://www.cnblogs.com/hofmann/p/10757268.html ///
[HttpPost]
[Route("ReceiveFileTest")]
public HttpResponseMessage ReceiveFileTest()
{
string result = string.Empty;
var request = HttpContext.Current.Request;
try
{
if (request.Files.Count > 0)
{
var fileNameList = new Liststring>();
string dirName = "other";
foreach (string f in request.Files)
{
var file = request.Files[f];
string fileExtension = Path.GetExtension(file.FileName).ToLower();
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff");
fileName += fileExtension;
if (!string.IsNullOrEmpty(fileExtension))
{
dirName = fileExtension.Substring(fileExtension.LastIndexOf(".") + 1);
}
string dir = "/_temp/file/" + dirName + "/" + DateTime.Now.ToString("yyyyMMdd") + "/";
string filePath = HttpContext.Current.Server.MapPath(dir);
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string fileSavePath = Path.Combine(filePath, fileName);
Stream postStream = file.InputStream;
//
FileStream fs = new FileStream(fileSavePath, FileMode.Create);
byte[] new_b = new byte[1024];
const int rbuffer = 1024;
while (postStream.Read(new_b, 0, rbuffer) != 0)
{
fs.Write(new_b, 0, rbuffer);
}
postStream.Close();
fs.Close();
fs.Dispose();
string dirPath = dir + fileName;
fileNameList.Add(dirPath);
fileNameList.Add(fileName);
}
result = DNTRequest.GetResultJson(true, string.Format("{0}:{1}", HttpStatusCode.OK, string.Join(",", fileNameList.ToArray())), null);
}
else
{
result = DNTRequest.GetResultJson(false, "请选择上传的文件", null);
}
}
catch (Exception ex)
{
result = DNTRequest.GetResultJson(false, ex.Message, null);
}
HttpResponseMessage responseMessage = new HttpResponseMessage { Content = new StringContent(result, Encoding.GetEncoding("UTF-8"), "text/plain") };
return responseMessage;
}
///
input type="file" name="file" />
form action="/Test/UploadFileTest" method="post" enctype="multipart/form-data">
fieldset>
legend>Form表单提交到本地Controllegend>
div class="form-group">
label class="col-sm-2 control-label" for="ds_host">选择文件label>
div class="col-sm-4">
input class="form-control" id="inpFileUrl3" name="inpFileUrl3" type="text" placeholder="上传后返回地址" />
div>
div class="col-sm-4">
input type="file" name="file" />
div>
div class="col-sm-2">
input type="submit" value="提交" />
div>
div>
fieldset>
form>
[HttpPost]
public ActionResult UploadFileTest()
{
string result = string.Empty;
string apiUrl = "http://localhost:19420/Api/ReceiveFileTest";
string contentType = "application/octet-stream";
var files = new Liststring>();
foreach (string f in Request.Files)
{
var file = Request.Files[f];
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData = true;
//request.AddParameter("fileName", file.FileName);
Stream postStream = file.InputStream;
byte[] b = new byte[postStream.Length];
request.AddFile("file", b, file.FileName, contentType);
var restClient = new RestClient { BaseUrl = new Uri(apiUrl) };
string res = string.Empty;
IRestResponse
上一篇:net core体系-API-1Ocelot-(3)项目实战
下一篇:C#基础