/*

功能说明:微信退款需要有数字证书,而我们公司是做小程序平台的,会帮商家自动退款,所以会要求商家把微信证书上传至我们服务器,以便

微信退款。

使用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 后端文件传输至远程服务器的更多相关文章

  1. Linux系统复制文件/文件夹到远程服务器

    从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...

  2. git如何将本地文件关联到远程服务器

    很多时候,当我们关联git服务器的时候,本地都有可能会有一些开发的东西需要同步上去.那怎么样设置同步呢!跟我来做,简易配置: git本地关联远程项目:      第一步:选择目录           ...

  3. 利用xcopy命令实现本地文件复制到远程服务器的方法

    net use \\192.168.1.198\ipc$ Zqf198703 /user:royalpeak xcopy g:\backup\*.* \\192.168.1.198\数据备份 /D / ...

  4. aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误

    代码在运行到response = (HttpWebResponse)request.GetResponse();就开始报错 原因:可能因为所调用的接口不存在或者接口中存在错误,可用postman测试接 ...

  5. Windows系统 本地文件如何复制到远程服务器

    很多人在使用远程服务器的时候往往要将本地的文件传输到远程服务器内,方法有很多种,下面介绍下如何使用Windows自带的远程桌面连接程序将文件复制到远程服务器内. 1.首先,点击windows开始按钮, ...

  6. 使用WinScp连接远程服务器和传输文件

    早在3月份,我就使用到了WinScp,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议. 它的主要功能就是在本地与远程计算机间安全的复制文件..WinSc ...

  7. Ubuntu14.04 使用scp远程传输命令进行服务器文件互传

    1.将另一个服务器上的文件拷贝到本地 sudo scp host_name@host_ip:/home/aaa/bbb /ccc/ddd/bbb 上面命令的意思是将远程服务器/home/aaa/目录下 ...

  8. Linux 服务器之间文件传输

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...

  9. ubuntu服务器与本地文件传输

    ubuntu SSH 连接.远程上传下载文件 博客分类: Ubuntu   安装 SSH(Secure Shell) 服务以提供远程管理服务 sudo apt-get install ssh SSH ...

随机推荐

  1. sqlserver 取月初月末的时间

    1.取月初的时间   --getdate() :2012/05/08  19:29:00 select convert(varchar,dateadd(day,-day(getdate())+1,ge ...

  2. Eclipse创建jsp web项目

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse 附带了一个标准的插件集,包括Java开 ...

  3. JavaScript--函数中this的几种指向

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 如何实现已发布app的自动更新

    要实现app的自动更新,做两件事情就可以搞定 1.获取当前手机中的app版本号 我们可以通过查询mainbundle中的获取CFBundleVersion NSDictionary *infoDict ...

  5. django模型中auto_now和auto_now_add的区别

    auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间. auto_now_add为添加时的时间,更新对象时不会有变动. 补充: 创建类时:DateField表示年月日 DateTime ...

  6. idea导入gradle项目后,找不到右边gradle窗口

    解决方案:关闭当前项目idea,随便打开个其他的项目 选择你刚刚的gradle项目 一定要选择你的gradle文件,然后OK就行了..剩下的按照指示打开就会显示gradle右边窗了 原文弟子:http ...

  7. objectarx之模型空间

    AcDbObjectId CCommonFuntion::PostToModelSpace(AcDbEntity* pEnt){ // 获得指向块表的指针 AcDbBlockTable *pBlock ...

  8. python 子类继承父类属性及实例化方法

  9. [转]GDB调试基础

    一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或 ...

  10. hdu1532&&poj1273 最大流

    Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1. (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4 ...