C#实现图片上传(PC端和APP)保存及 跨域上传说明

C#实现图片上传(PC端和APP)保存及 跨域上传说明

本文将会详细介绍C#如何实现图片上传并保存,以及如何进行跨域上传,下面将分别进行讲解。

PC端图片上传及保存

1.前端上传代码

前端的上传代码可以使用form表单配合input文件控件来完成:

<form action="upload.aspx" method="post" enctype="multipart/form-data">
    <input type="file" name="file1" />
    <input type="submit" value="上传" />
</form>

2.后端代码

后端将上传的图片进行保存的代码如下所示:

string fileName = Path.GetFileName(file1.PostedFile.FileName);//获取上传文件的文件名
string fileEx = Path.GetExtension(fileName);//获取文件类型
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10000, 99999).ToString() + fileEx;//生成新文件名
string SaveLocation = Server.MapPath("~\\uploads\\") + newFileName;//上传文件保存的路径
try
{
    file1.PostedFile.SaveAs(SaveLocation);//保存文件
    Response.Write("文件上传成功!");//上传成功后输出提示信息
}
catch (Exception ex)
{
    Response.Write(ex.Message);//上传失败时输出错误信息
}

3.注意事项

在进行上传时,需要注意以下几点:

  • 上传文件大小要限制,否则可能会造成服务器崩溃;
  • 应该对上传的文件类型进行验证,防止上传非法文件;
  • 上传文件应该保存在专门的文件夹中,以免混淆。

APP图片上传及保存

1.前端代码

Android和iOS开发中,一般使用第三方库或框架来实现图片上传功能,这里介绍一下Android中使用OkHttp库上传图片的方法:

public void uploadFile(File file) throws IOException {
    OkHttpClient client = new OkHttpClient();
    RequestBody requestBody = new MultipartBody.Builder()//构造请求体
            .setType(MultipartBody.FORM)
            .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file))
            .build();
    Request request = new Request.Builder()//构造请求
            .url(uploadUrl)//上传接口地址
            .post(requestBody)
            .build();
    Response response = client.newCall(request).execute();//执行请求
    if (response.isSuccessful()) {
        String responseStr = response.body().string();//请求响应的字符串
        //处理响应
    } else {
        throw new IOException("Unexpected code " + response);
    }
}

2.后端代码

后端将上传的图片进行保存的代码如下所示:

[HttpPost]
public ActionResult Upload()
{
    HttpFileCollectionBase files = Request.Files;
    //如果没有上传文件
    if (files == null || files.Count == 0)
    {
        return Json(new { status = "error", message = "没有上传文件" });
    }

    HttpPostedFileBase file = files[0];
    string fileName = Path.GetFileName(file.FileName);//获取上传文件的文件名
    string fileEx = Path.GetExtension(fileName);//获取文件类型
    string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10000, 99999).ToString() + fileEx;//生成新文件名
    string SaveLocation = Server.MapPath("~\\uploads\\") + newFileName;//上传文件保存的路径
    try
    {
        file.SaveAs(SaveLocation);//保存文件
        return Json(new { status = "success", message = "文件上传成功!" });
    }
    catch (Exception ex)
    {
        return Json(new { status = "error", message = ex.Message });//上传失败时返回错误信息
    }
}

3.注意事项

在进行APP端的图片上传时,需要注意以下几点:

  • 在构造请求体时,需要使用MultipartBody来构造;
  • 上传接口地址应该与后端代码中的地址相匹配;
  • 上传成功后,应该对响应进行处理。

跨域图片上传

1.前端代码

在进行跨域上传时,需要使用XMLHttpRequest对象来实现异步上传。下面是一个基本的跨域上传示例:

function upload(){
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://www.example.com/upload', true);//跨域上传地址
    xhr.setRequestHeader('Content-Type', 'multipart/form-data');
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                console.log(xhr.responseText);//上传成功后的处理
            }else{
                console.error(xhr.statusText);//上传失败后的处理
            }
        }
    }
    xhr.send(new FormData(document.getElementById('upload-form')));
}

2.后端代码

后端将上传的图片进行保存的代码与之前的示例是一样的,这里不再赘述。需要注意的是,在进行跨域上传时,需要根据实际情况设置Access-Control-Allow-*头,使得前端能够正常访问。

3.注意事项

在进行跨域上传时,需要注意以下几点:

  • 必须使用XMLHttpRequest对象来实现上传;
  • 需要设置Access-Control-Allow-*头以实现跨域访问;
  • 在进行跨域上传时,浏览器会发出OPTIONS请求,需要在后端进行相应处理。

以上就是C#实现图片上传(PC端和APP)保存及跨域上传说明的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现图片上传(PC端和APP)保存及 跨域上传说明 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 云原生容器高可用运维能力应用

    摘要:华为云容器SRE在海量集群和容器运维实践中,从智能运维能力、确定性场景恢复等多方面总结出一套确定性运维实践,以应对云原生业务快速增长。 本文分享自华为云社区《云原生容器高可用运维能力应用》,作者:陈勇/刘志超/袁文峰。 云原生场景下,对架构高可用、应用高可用、基础云平台高可用提出了更高的要求,企业以及云平台都在不断致力于稳定性建设。但面对海量复杂的客户…

    云计算 2023年4月17日
    00
  • Pandas 合并多个Dataframe(merge,concat)的方法

    下面是关于Pandas合并多个DataFrame的攻略: 1. Pandas合并多个DataFrame的方法 Pandas提供了多种方法来合并多个DataFrame,常见的方法有 merge 和 concat。其中merge主要按照列或者行的索引进行合并,concat则是按照行或者列进行合并。在实际应用过程中,我们需要选择合适的合并方法来完成具体的任务。 2…

    云计算 2023年5月18日
    00
  • 云栖直播《云计算时代的企业容灾体系及能力建设精讲》(下)PPT资料整理

    云栖直播《云计算时代的企业容灾体系及能力建设精讲》(下)PPT资料整理 非常荣幸,今年三月份受阿里云MVP团队邀请,在云栖直播平台和钉钉平台上做了两期直播节目,与阿里云MVP以及全国各地ACE开发者一起分享了我对云计算时代的企业容灾体系及能力建设的一些认识。做完节目之后,许多同学给了我很多意见和建议,让我受益良多,非常感谢大家的支持和鼓励!针对大家比较集中的…

    云计算 2023年4月13日
    00
  • Asp.net MVC scheduler的实现方法详解

    Asp.net MVC scheduler是一个常用的日程管理工具,它可以帮助用户方便地安排和管理个人或团队的任务和时间安排。下面是Asp.net MVC scheduler的实现方法详解: 1. 安装和配置Asp.net MVC scheduler插件 首先要在Asp.net MVC项目中安装和配置scheduler插件。这个插件可以从官方网站下载,也可以…

    云计算 2023年5月17日
    00
  • 慕课笔记-数据科学导论-第八章大数据与云计算-云计算概念特点/分类/体系架构/大数据与云计算/应用/分布式计算/服务模式/主要技术

    大数据与云计算 (1)云计算的概念与特点 1.定义 Google:云计算是拥有开放标准和基于互联网服务的,可以提供安全、快捷和便利的数据存储和网络计算服务的系统。 美国国家标准与技术研究院(NIST):云计算是一种应用资源模式,它可以根据需要用一种很简单的方法通过网络访问已配置的计算资源。这些资源由服务提供商以最小的代价或专业的运作快速地配置和发布。 维基(…

    云计算 2023年4月12日
    00
  • Python数据分析Matplotlib 柱状图绘制

    下面是“Python数据分析Matplotlib 柱状图绘制”的完整攻略: 1. Matplotlib简介 Matplotlib 是一个 Python 的数据可视化工具,它可以创建各种图形、图表、柱状图等等。Matplotlib 使用 Numpy 数组作为底层结构,并集成了许多其他的 Python 生态工具。 2. 柱状图绘制方法 在 Matplotlib …

    云计算 2023年5月18日
    00
  • CentOS—常用网络配置详解

    CentOS—常用网络配置详解 CentOS是一种常用的Linux操作系统,网络配置是使用CentOS的重要部分。本文将介绍CentOS的常用网络配置,包括IP地址、网关、DNS、网络接口等方面。 IP地址 IP地址是网络通信的基础,CentOS的IP地址配置可以通过命令行或图形界面实现。 命令行配置 可以通过编辑/etc/sysconfig/netwo…

    云计算 2023年5月16日
    00
  • ASP.NET Core MVC 中实现中英文切换的示例代码

    接下来我将为您详细讲解“ASP.NET Core MVC 中实现中英文切换的示例代码”的完整攻略。 实现中英文切换 在ASP.NET Core MVC中,实现中英文切换可以通过多种方式实现,比如使用资源文件、使用JavaScript等方式。下面,我们将介绍一种比较常用的方式:使用资源文件。 第一步:添加资源文件 在项目的根目录下新建一个 Resources …

    云计算 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部