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日

相关文章

  • 腾讯云发布第三代云服务器矩阵,开放更强计算力赋能产业智能化

    云计算正在经历全新的变革,在强大的计算力之上,业务场景正在驱动技术的创新与变革。9月25日,腾讯云正式发布第三代云服务器(CVM)矩阵,最新的计算、存储、网络和异构计算实例首次亮相。 欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云计算团队 云计算正在经历全新的变革,在强大的计算力之上,业务场景正在驱动技术的创新与变革。9月25日,…

    云计算 2023年4月11日
    00
  • SuperEdge: 使用WebAssembly扩展边缘计算场景

    作者 SuperEdge 开发者团队 概要 SuperEdge 是 一个开源的分布式边缘计算容器管理系统,用于管理多个云边区域中的计算资源和容器应用。 在当前架构中,这些资源和应用能够作为一个 Kubernetes 原生的资源进行管理。 然而在某些情况下,边缘设备通常需要一些更加轻量、性能更好的运行时。也需要减少以 GB 为单位的容器镜像,将容器的启动时间提…

    云计算 2023年4月11日
    00
  • 浅谈设计师自学编程前需要了解和思考的问题

    浅谈设计师自学编程前需要了解和思考的问题攻略 随着互联网的不断发展和应用,设计师们开始重视编程的重要性,因此越来越多的设计师开始学习编程。在自学编程之前设计师们需要了解和思考哪些问题呢? 初步了解编程的基础知识 自学编程需要掌握一定的编程知识,其中包括编程语言、数据结构和算法、计算机操作系统等。初步了解编程的基础知识可以帮助设计师了解编程的基本概念和技术,更…

    云计算 2023年5月18日
    00
  • Python解析json时提示“string indices must be integers”问题解决方法

    当我们使用Python解析json时,可能会遇到“string indices must be integers”错误,这通常是由于我们使用了非法的访问方式。以下是解决这个问题的完整攻略: 问题背景 在使用Python解析json过程中,代码如下: import json json_str = ‘{"name": "Alice&…

    云计算 2023年5月18日
    00
  • ASP.NET Core使用HttpClient调用WebService

    ASP.NET Core是一个跨平台的Web开发框架,可以使用C#语言进行开发。HttpClient是用于与Web服务进行通信的类库,可以实现HTTP/HTTPS通信。本文将介绍如何使用ASP.NET Core中的HttpClient类库调用Web服务。 1. 安装HttpClient 在ASP.NET Core应用程序中使用HttpClient类库,需要通…

    云计算 2023年5月17日
    00
  • Linux云计算工程师

    一、Linux运维基础 二、Linux运维高级-核心知识提高 三、50台集群实战 四、200-1000台集群实战 五、shell编程企业级实战 六、数据库MySQL和NoSQL 七、LVM虚拟化和机房知识

    云计算 2023年4月13日
    00
  • 云计算设计模式(七)——事件获取模式

    云计算设计模式(七)——事件获取模式 使用仅追加存储到记录完整一系列描述在一个域上取数据,而不是存储仅仅是当前的状态,从而使存储区可以被用来实现该域对象的动作事件。该图案可以通过避免需要同步的数据模型和商业领域中简化复杂的结构域的任务;提高性能,可扩展性和响应能力;提供交易数据的一致性;并保持完整的审计跟踪和记录,可能使补偿措施。  背景和问题 大多数应用程…

    云计算 2023年4月11日
    00
  • 详解ASP.NET MVC的整个生命周期

    ASP.NET MVC 是微软推出的一款Web开发框架。在ASP.NET MVC应用程序的整个生命周期中,ASP.NET MVC框架将执行许多步骤。下面我将详细讲解ASP.NET MVC生命周期的完整攻略,并且会提供两个示例以便更好地理解。 ASP.NET MVC 生命周期的完整攻略 ASP.NET MVC生命周期包含以下步骤: 1.路由解析 在请求进入AS…

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