文件的上传

iFat的笔记本 iFat的笔记本     2022-09-08     509

关键词:

  • 10.1 文件上传步骤

      (1)确定请求路径
      (2)根据URL创建一个可变的请求对象
      (3)设置请求对象,修改请求方式为POST
      (4)设置请求头,告诉服务器我们将要上传文件(Content-Type)
      (5)设置请求体(在请求体中按照既定的格式拼接要上传的文件参数和非文件参数等数据)
          001 拼接文件参数
          002 拼接非文件参数
          003 添加结尾标记
      (6)使用NSURLConnection sendAsync发送异步请求上传文件
      (7)解析服务器返回的数据
    
  • 10.2 文件上传设置请求体的数据格式

      //请求体拼接格式
      //分隔符:----WebKitFormBoundaryhBDKBUWBHnAgvz9c
    
      //01.文件参数拼接格式
    
       --分隔符
       Content-Disposition:参数
       Content-Type:参数
       空行
       文件参数
    
      //02.非文件拼接参数
       --分隔符
       Content-Disposition:参数
       空行
       非文件的二进制数据
    
      //03.结尾标识
      --分隔符--
    
  • 10.3 文件上传相关代码

- (void)upload
{
    //1.确定请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"];

    //2.创建一个可变的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //3.设置请求方式为POST
    request.HTTPMethod = @"POST";

    //4.设置请求头
    NSString *filed = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",Kboundary];
    [request setValue:filed forHTTPHeaderField:@"Content-Type"];

    //5.设置请求体
    NSMutableData *data = [NSMutableData data];
    //5.1 文件参数
    /*
     --分隔符
     Content-Disposition:参数
     Content-Type:参数
     空行
     文件参数
     */
    [data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];
    [data appendData:[@"Content-Disposition: form-data; name="file"; filename="test.png"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];
    [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];
    [data appendData:KnewLine];
    [data appendData:KnewLine];

    UIImage *image = [UIImage imageNamed:@"test"];
    NSData *imageData = UIImagePNGRepresentation(image);
    [data appendData:imageData];
    [data appendData:KnewLine];

    //5.2 非文件参数
    /*
     --分隔符
     Content-Disposition:参数
     空行
     非文件参数的二进制数据
     */

    [data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];
    [data appendData:[@"Content-Disposition: form-data; name="username"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];
    [data appendData:KnewLine];
    [data appendData:KnewLine];

    NSData *nameData = [@"wendingding" dataUsingEncoding:NSUTF8StringEncoding];
    [data appendData:nameData];
    [data appendData:KnewLine];

    //5.3 结尾标识
    //--分隔符--
    [data appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:KnewLine];

    request.HTTPBody = data;

    //6.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) {

        //7.解析服务器返回的数据
        NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
    }];
}
  • 10.4 如何获得文件的MIMEType类型

(1)直接对该对象发送一个异步网络请求,在响应头中通过response.MIMEType拿到文件的MIMEType类型

//如果想要及时拿到该数据,那么可以发送一个同步请求
- (NSString *)getMIMEType
{
    NSString *filePath = @"/Users/文顶顶/Desktop/备课/其它/swift.md";

    NSURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]] returningResponse:&response error:nil];
    return response.MIMEType;
}

//对该文件发送一个异步请求,拿到文件的MIMEType
- (void)MIMEType
{

    //    NSString *file = @"file:///Users/文顶顶/Desktop/test.png";

    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:@"/Users/文顶顶/Desktop/test.png"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) {
        //       response.MIMEType
        NSLog(@"%@",response.MIMEType);

    }];
}

(2)通过UTTypeCopyPreferredTagWithClass方法

//注意:需要依赖于框架MobileCoreServices
- (NSString *)mimeTypeForFileAtPath:(NSString *)path
{
    if (![[[NSFileManager alloc] init] fileExistsAtPath:path]) {
        return nil;
    }

    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    if (!MIMEType) {
        return @"application/octet-stream";
    }
    return (__bridge NSString *)(MIMEType);
}

文件上传-1

文件上传是什么?网络攻击者上传了一个可执行的文件到服务器并执行,这里上传的文件可以说木马,病毒,恶意脚本或者webshell等,这种攻击方式最为直接和有效的主要出现在哪?网站上上传图片,上传文件等的位置。文件上... 查看详情

文件上传控件-如何上传文件-文件夹断点续传

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、... 查看详情

文件上传图片

通过PHP,可以把文件上传到服务器。里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件。为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的网站源码,全部救... 查看详情

struts2文件上传

Struts2提供了文件上传的框架,Struts2默认的文件上传框架是cos,大家也可以根据自己的需要修改Struts2中的文件上传框架,对于文件上传来说,无论使用Struts2中的哪一种框架,上传方式都是比较简单的。下面用一个案例介绍Struts2的... 查看详情

文件的上传

...的照片都喜欢上传自己的空间,这就涉及到了web开发中的文件上传功能,文件上传功能是web开发中常见的功能,那他是怎么上传的呢?文件的上传1.简介>将一个客户端的本地的文件发送到服务器中保存。>上传文件是通过流的... 查看详情

文件上传漏洞

文件上传漏洞原理在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。文件上传漏洞对Web应用来说是... 查看详情

文件上传

1.文件上传的页面2.上传文件要保存的文件夹1.只要将文件传上来就行 //1、获取要上传的文件,并且知道要上传到服务器的路径strings="Uploads/aaa.txt";//2、生成绝对路径stringpath=Server.MapPath(s); //3、上传FileUpload1.SaveAs(path);问题:文件... 查看详情

文件的上传:二进制文件的上传;

***二进制文件上传的方法:<formaction="uploadServlet"method="post"enctype="multipart/form-data">***在lib目录下:导入文件上传的开源架包:commons-fileupload-1.2.1.jar,commons-io-2.0.jar; 建立Servlet类:UploadServlet,实现文件上传的方 查看详情

文件上传漏洞(代码片段)

文件上传文件上传就是在一些web应用中允许用户上传图片,文本等相应文件到服务器指定的位置。而文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,之后通过url去访问以执行代码达到攻击的目的。可以成... 查看详情

局域网大文件分片上传处理

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、... 查看详情

文件上传漏洞与利用

1文件上传过程分析1.1PHP文件上传关于PHP中$_files数组的使用方法 1.2PHP文件上传源代码  前端上传页面:upfile.php   上传处理程序:upload.php 1.3PHP文件上传过程分析 2文件上传风险:允许用户上传文件是一个巨大... 查看详情

上传文件失败,具体原因:上传的文件超过大小限制,请上传小于1024k的文件?

服务器默认设置没改导致的NGINX、Tomcat都有相关设置百度搜一下上传文件超过1M报错就知道了,改下参数并重启服务就行了。参考技术A1024K=1M。看下你上传的文件大小。右键点文件图标,选属性。可以查看 查看详情

网页上传文件夹的解决方案

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、... 查看详情

上传的文件的临时名称没有进入 blueimp jQuery 文件上传

】上传的文件的临时名称没有进入blueimpjQuery文件上传【英文标题】:temporarynameoffileuploadednotgettinginblueimpjQueryfileupload【发布时间】:2020-10-2811:01:42【问题描述】:我正在为文件上传器使用blueimpjQuery文件上传。这是我的控制器代... 查看详情

iview实现文件上传限制上传格式大小

问题描述:下面以CRMEBPro版产品为例1.当上传的文件格式类型不为jpeg、png、gif、jpg时,提示上传的文件格式不正确2.当上传的文件大小超过后端返回的大小时,提示文件体积过大需要限制文件上传的格式和大小,最后的实现效果... 查看详情

什么是文件上传漏洞

文件上传漏洞是指:由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa办公文件上传,媒体上传,允许用户上传文件的... 查看详情

一文概述文件上传漏洞

什么是文件上传?文件上传:它指的是计算机中的一个​​专有名词​​,是客户端将​​文件​​传输到​​服务器端​​的过程叫“文件上传”。文件上传分为​​web上传​​和​​ftp上传​​web上传是指通过浏览器进行的... 查看详情

文件上传漏洞专题(代码片段)

文件上传漏洞专题一、文件上传漏洞基础? web应用程序在处理用户上传的文件操作时,如果用户上传的文件的路径、文件名、扩展名成为用户可控数据,就会导致直接上传脚本木马到web服务器,直接控制web服务器? 文件上传:文... 查看详情