[转]WebApi 后端文件传输至远程服务器
/* 功能说明:微信退款需要有数字证书,而我们公司是做小程序平台的,会帮商家自动退款,所以会要求商家把微信证书上传至我们服务器,以便 微信退款。 使用HttpPostedFile 接受前端上传的文件,再使用 */ #region 证书上传 UploadCertificate
/// <summary>
/// 证书上传
/// </summary>
/// <returns></returns>
[HttpPost]
public IHttpActionResult UploadCertificate()
{ //此字段代表商家证书存储的文件夹
string enterpriseId = "test";
OperationResult response = new OperationResult
{
Code = OperationResultType.IllegalOperation,
Message = "不是有效的p12证书文件"
};
try
{
HttpFileCollection filelist = HttpContext.Current.Request.Files;
if (filelist != null && filelist.Count > 0)
{
HttpPostedFile file = filelist[0];
//文件名
string fileName = file.FileName;
if (string.IsNullOrWhiteSpace(fileName) || !fileName.Contains("."))
{
return Json(response);
}
var fileNameSplit = fileName.Trim(new[] { '"' }).Split('.');
//文件后缀名
string fileExName = fileNameSplit[fileNameSplit.Length - 1];
if (!fileExName.Equals("p12"))
{
return Json(response);
} //上传文件至远程服务器
string res = PostResponse($"url",new HttpPostedFile[] { file });
if (!string.IsNullOrWhiteSpace(res))
{
return Json(JsonUtility.DeserializeObject<OperationResult>(res));
}
}
}
catch (Exception ex)
{
LogHelper.Error("UploadCertificate-error", ex);
}
return Json(response);
} #endregion #region 使用WebRequest构建多媒体文件上传远程服务器 PostResponse
/// <summary>
/// 发起httpPost 请求,可以上传文件
/// </summary>
/// <param name="url">请求的地址</param>
/// <param name="files">文件</param>
/// <returns></returns>
public static string PostResponse(string url, HttpPostedFile[] files)
{
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;
//request.Credentials = CredentialCache.DefaultCredentials;
request.Expect = ""; MemoryStream stream = new MemoryStream(); byte[] line = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
byte[] enterER = Encoding.ASCII.GetBytes("\r\n");
////提交文件
if (files != null)
{
string fformat = "Content-Disposition:form-data; name=\"file\";filename=\"{0}\"\r\nContent-Type:{1}\r\n\r\n";
foreach (HttpPostedFile file in files)
{
//#region HttpPostedFile.InputStream=>byte[]
//Stream inputStream = file.InputStream;//new MemoryStream();
//byte[] bytes = new byte[stream.Length];
//#endregion
var fileStream = file.InputStream;
var buffer = new byte[1024];
int bytesRead; // =0 stream.Write(line, 0, line.Length); //项目分隔符
string s = string.Format(fformat, file.FileName, file.ContentType);
byte[] data = Encoding.UTF8.GetBytes(s);
stream.Write(data, 0, data.Length);
//stream.Write(bytes, 0, bytes.Length);//文件内容
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
stream.Write(buffer, 0, bytesRead);
}
stream.Write(enterER, 0, enterER.Length); //添加\r\n
}
} byte[] foot_data = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); //项目最后的分隔符字符串需要带上--
stream.Write(foot_data, 0, foot_data.Length); request.ContentLength = stream.Length;
Stream requestStream = request.GetRequestStream(); //写入请求数据
stream.Position = 0L;
stream.CopyTo(requestStream); //
stream.Close(); requestStream.Close();
try
{
#region
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
response = (HttpWebResponse)ex.Response;
} #endregion
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamIn = response.GetResponseStream(); StreamReader reader = new StreamReader(streamIn);
string result = reader.ReadToEnd();
reader.Close();
streamIn.Close();
response.Close(); return result;
}
catch (Exception ex)
{
throw ex;
}
#endregion
---------------------
作者:小小周
来源:CNBLOGS
原文:https://www.cnblogs.com/zlj-rechio/p/9953548.html
版权声明:本文为作者原创文章,转载请附上博文链接!
[转]WebApi 后端文件传输至远程服务器的更多相关文章
- Linux系统复制文件/文件夹到远程服务器
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...
- git如何将本地文件关联到远程服务器
很多时候,当我们关联git服务器的时候,本地都有可能会有一些开发的东西需要同步上去.那怎么样设置同步呢!跟我来做,简易配置: git本地关联远程项目: 第一步:选择目录 ...
- 利用xcopy命令实现本地文件复制到远程服务器的方法
net use \\192.168.1.198\ipc$ Zqf198703 /user:royalpeak xcopy g:\backup\*.* \\192.168.1.198\数据备份 /D / ...
- aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误
代码在运行到response = (HttpWebResponse)request.GetResponse();就开始报错 原因:可能因为所调用的接口不存在或者接口中存在错误,可用postman测试接 ...
- Windows系统 本地文件如何复制到远程服务器
很多人在使用远程服务器的时候往往要将本地的文件传输到远程服务器内,方法有很多种,下面介绍下如何使用Windows自带的远程桌面连接程序将文件复制到远程服务器内. 1.首先,点击windows开始按钮, ...
- 使用WinScp连接远程服务器和传输文件
早在3月份,我就使用到了WinScp,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议. 它的主要功能就是在本地与远程计算机间安全的复制文件..WinSc ...
- Ubuntu14.04 使用scp远程传输命令进行服务器文件互传
1.将另一个服务器上的文件拷贝到本地 sudo scp host_name@host_ip:/home/aaa/bbb /ccc/ddd/bbb 上面命令的意思是将远程服务器/home/aaa/目录下 ...
- Linux 服务器之间文件传输
linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...
- ubuntu服务器与本地文件传输
ubuntu SSH 连接.远程上传下载文件 博客分类: Ubuntu 安装 SSH(Secure Shell) 服务以提供远程管理服务 sudo apt-get install ssh SSH ...
随机推荐
- 2018-5-22-SublimeText-粘贴图片保存到本地
title author date CreateTime categories SublimeText 粘贴图片保存到本地 lindexi 2018-05-22 15:15:26 +0800 2018 ...
- python findall函数
- spark-ML基础
一.ML组件 ML的标准API使用管道(pipeline)这样的方式,可以将多个算法或者数据处理过程整合到一个管道或者一个流程里运行,其中包含下面几个部分: 1. dataFrame:用于ML的dat ...
- linux C 编译时手动链接遇到的问题(未解决)
写多线程的时候,编译的时候遇到了问题,开始的时候是这样的: 编译器不认识pthread_create和pthread_join这两个函数. 搜了一下原因是没有链接相应的库,下面是我看到一个博友写的: ...
- linux下播放器设计和开发
http://blog.csdn.net/henryjee/article/details/6737392 本文根据DawnLightPlayer的开发经验写成.DawnLithtPlayer是今天3 ...
- markdown-it + highlight.js简易实现
markdown-it 官方demo markdown-it 文档 1.配置highlightjs,针对markdown中各种语言高亮,针对对应的标签 pre code 里面的样式 -- index. ...
- iOS app 设计推荐
见微知著,谈移动缺省页设计 http://www.cocoachina.com/design/20150303/11186.html Facebook产品设计总监!设计APP时的14个必考题 http ...
- 《mysql必知必会》笔记1(检索、排序、过滤、计算、汇聚、分组)
一:了解SQL 1:列是表中的字段,所有表都由一个或多个列组成的.行是表中的记录,表中的数据都按行存储. 2:表中每一行都应该有可以唯一标识自己的一列或一组列.主键(一列或一组列),其值能够唯一区分每 ...
- [asp.net]登录协同工作平台安全解决方式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/david_520042/article/details/25372207 [摘要]公司领导说登录验证 ...
- 项目中遇到的undo表空间不足的替换
1.查找数据库的UNDO表空间名 select name from v$tablespace; ...