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日

相关文章

  • qt小例子:实现阿里云物联网设备登录信息计算器

    阿里云的物联网平台设备端使用mqtt时必须要使用阿里云加密算法通过设备三元组算出来的username、password、clientId才可以连接成功 使用mqtt.fx、mqttBox等客户端软件时必须要根据设备三元组计算出正确的登录信息,最近在使用qt,所以使用qt写了这么一个小工具 做出来的基本效果为:   在下面输入阿里云物联网平台设备的三元组信息,…

    2023年4月10日
    00
  • .net core下配置访问数据库操作

    配置访问数据库操作 在.NET Core应用程序中,访问数据库时,需要配置数据库连接以及数据库提供程序。常用的数据库提供程序有:Microsoft SQL Server、MySQL、PostgreSQL和SQLite等。 下面是配置访问数据库操作的完整攻略。 1.添加nuget包 在项目中添加数据库提供程序的nuget包。如需使用MySQL,则添加MySql…

    云计算 2023年5月17日
    00
  • 【第27届中国国际金融展】通付盾精彩亮点提前看

    StackOverflow是一个知名的技术问答社区,为全球程序员提供了一个交流学习的平台。以下是支撑StackOverflow运营的网站硬件配置分享的详细攻略: 1. 硬件配置 1.1. 服务器 StackOverflow使用多台服务器来支撑其运营。其中,主要的服务器配置如下: CPU:Intel Xeon E5-2670 v2 内存:128GB DDR3 …

    云计算 2023年5月16日
    00
  • 云计算与边缘计算协同 九大应用场景

    一、云边协同的新浪潮 (一)边缘计算是云计算向边缘侧分布式拓展的新触角   欧洲电信标准化协会认为边缘计算是在移动网络边缘提供 IT 服务环境和计算能力,强调靠近移动用户,以减少网络操作和服务交付 的时延,提高用户体验。   Gartner 认为边缘计算描述了一种计算拓扑,在这种拓扑结构中, 信息处理、内容采集和分发均被置于距离信息更近的源头处完成。    …

    云计算 2023年4月11日
    00
  • .net6引入autofac框架

    下面是关于“.NET 6引入Autofac框架”的完整攻略,包含两个示例说明。 简介 Autofac是一个流行的依赖注入框架,它可以帮助我们管理应用程序中的对象和依赖关系。在.NET 6中,Autofac已经成为了官方支持的依赖注入框架之一。本文将详细讲解如何在.NET 6中使用Autofac框架。 Autofac框架的优势 Autofac框架的优势主要体现…

    云计算 2023年5月16日
    00
  • 云计算基础设施的定义与介绍

    在云计算基础架构中,包括一个虚拟化资源的抽象层,并通过应用程序界面和启用API的命令行或图形界面将用户逻辑地呈现给用户。 在云计算中,这些虚拟化资源由服务提供商或IT部门托管,并通过网络或互联网传递给用户。这些资源包括虚拟机和组件,如服务器,内存,网络交换机,防火墙,负载平衡器和存储。 (1)云基础设施组件 在云计算架构中,云基础架构是指后端组件,这些大多数…

    云计算 2023年4月12日
    00
  • 关于Unity C# Mathf.Abs()取绝对值性能测试详解

    关于Unity C# Mathf.Abs()取绝对值性能测试详解 在Unity C#中,我们经常需要使用Mathf.Abs()方法来取绝对值。但是,对于大量的数据计算,Mathf.Abs()方法的性能可能会成为瓶颈。本文将提供一个完整攻略,包括如何测试Mathf.Abs()方法的性能,并提供两个示例说明。 步骤1:编写测试程序 首先,我们需要编写一个测试程序…

    云计算 2023年5月16日
    00
  • 深入解析Python编程中super关键字的用法

    深入解析Python编程中super关键字的用法 Python中的super()是一个非常有用的关键字,它用于调用父类的方法,包括继承自object的方法和使用多重继承情况下的方法。使用super()方法,可以让编写代码更加简单易懂,并且避免了一些潜在的问题。 一般的继承过程及问题 通常,Python中的继承过程使用以下代码实现: class ParentC…

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