iOS 将文件压缩成zip包再上传至服务器

这篇具有很好参考价值的文章主要介绍了iOS 将文件压缩成zip包再上传至服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运用ssziparchive 来完成zip 压缩。

/**
 初始化 UIDocumentPickerViewController
 
 @param allowedUTIs 支持的文件类型数组
 "public.content",
 "public.text",
 "public.source-code",
 "public.image",
 "public.audiovisual-content",
 "com.adobe.pdf",
 "com.apple.keynote.key",
 "com.microsoft.word.doc",
 "com.microsoft.excel.xls",
 "com.microsoft.powerpoint.ppt"
 @param mode 支持的共享模式
 */
- (UIDocumentPickerViewController *)documentPickerVC {
    
   NSArray * array = @[@"public.data",@"public.content",@"public.audiovisual-content",@"public.movie",@"public.audiovisual-content",@"public.video",@"public.audio",@"public.text",@"public.data",@"public.zip-archive",@"com.pkware.zip-archive",@"public.composite-content",@"public.text",@"com.microsoft.powerpoint.ppt",@"com.microsoft.powerpoint.​pptx",];
    
    if (!_documentPickerVC) {
        NSArray *types = array;
        self.documentPickerVC = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:types inMode:UIDocumentPickerModeOpen];
        // 设置代理
        _documentPickerVC.delegate = self;
        if (@available(iOS 11.0, *)) {
            _documentPickerVC.allowsMultipleSelection = YES;
        } else {
            // Fallback on earlier versions
        }
        // 设置模态弹出方式
        _documentPickerVC.modalPresentationStyle = UIModalPresentationFullScreen;
    }
    return _documentPickerVC;
}
- (NSString *)tempZipPath {
    NSString *path = [NSString stringWithFormat:@"%@.zip",
                      NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]]
                     ;
    return path;
}

- (NSString *)_cachesPath:(NSString *)directory {
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject
                      stringByAppendingPathComponent:@"zipArchive"];
    if (directory) {
        path = [path stringByAppendingPathComponent:directory];
    }

    [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

    return path;
}

按钮点击出现文件选择:

   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [weak_self presentViewController:weak_self.documentPickerVC animated:false completion:^{
                    if (@available(iOS 11.0, *)) {
                        weak_self.documentPickerVC.allowsMultipleSelection = YES;
                    }
                }];
                ```

文件选择完成之后的代理:

```c
#pragma mark -选择文件
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
    
    NSString *outputPath = [self _cachesPath:@"Zipped"];
    NSString *userName = DSStringValue(self.modelRestartTreatPlanSubmit.CaseMainItem.PatientName);
    
    NSString *archivePath = [outputPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip", userName]];
//    NSString *archivePath = [outputPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip", @"archive"]];
    NSMutableArray *arr = [NSMutableArray array];
    
    for (NSURL *url in urls) {
        BOOL fileUrlAuthozied = [url startAccessingSecurityScopedResource];
        if (!fileUrlAuthozied){
            [self showMessage:@"文件授权失败,请授权"];
            return;
        }
        // 通过文件协调工具来得到新的文件地址,以此得到文件保护功能
        NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
        NSError *error;
        [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL * _Nonnull newURL) {

            NSString *filePath2 = newURL.path ;;
            [arr addObject:filePath2];
        }];
    }
    NSArray *inputPaths = [arr copy];
    BOOL success = [SSZipArchive createZipFileAtPath:archivePath withFilesAtPaths:inputPaths];

    for (NSURL *url in urls) {
        [url stopAccessingSecurityScopedResource];
    }
    if (success) {
        NSLog(@"Success zip");

    } else {
        NSLog(@"No success zip");
    }

        if(success){

            NSData *fileData = [NSData dataWithContentsOfFile:archivePath options:NSDataReadingMappedIfSafe error:nil];

            // 上传
            dispatch_async(dispatch_get_main_queue(), ^{
            [self showLoading];
            });
            [[STHeadUpload headUploadShareInstance]requestActionFile:archivePath fileData:fileData followRequestName:AddUpdateRestartTreatPlan3Method progressBlock:^(float progress) {
                                    
                                } successBlock:^(NSString * _Nonnull url) {
                                    
                                    dispatch_async(dispatch_get_main_queue(), ^{
                                        [self hideLoading];
                                        
                                        self.modelRestartTreatPlanSubmit.CaseTeethModelItem.LocalPath = DSStringValue(url);
                                        [self.arrSubmit[2] setObject:DSStringValue(url) forKey:@"LocalPath"];

//                                        dispatch_async(dispatch_get_main_queue(), ^{
                                            
                                            [UIView performWithoutAnimation:^{//去掉刷新
                                                [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:3 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
                                            }];

//                                        //清除缓存
                                        [[NSFileManager defaultManager] removeItemAtPath:archivePath error:nil];

                                    });
                                } failedBlock:^(NSString * _Nonnull error) {
                                    dispatch_async(dispatch_get_main_queue(), ^{
                                        [self hideLoading];
                                        //清除缓存
                                      [[NSFileManager defaultManager] removeItemAtPath:archivePath error:nil];
                                    });
                                }];
//            [self dismissViewControllerAnimated:YES completion:NULL];

            NSLog(@"fileName : %@", _zipPath);

        }else{
            NSLog(@"No success zip");
        }
          
 
}

注意:所有的文件都需要授权 不然会访问不到文件内容文章来源地址https://www.toymoban.com/news/detail-549518.html

到了这里,关于iOS 将文件压缩成zip包再上传至服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Django中使用zipfile模块实现对上传的zip压缩包提取文件名

    目录 方法一:解压zip压缩包 思路一:获取带相对路径的文件名 思路二:只获取文件名(不带路径) 方法二:不解压压缩包(推荐) 思路一:获取带相对路径的文件名 思路二:只获取文件名(不带路径) 中文乱码的处理 方式一:解压压缩包(不带路径) 方式二:解压压缩

    2024年02月13日
    浏览(52)
  • MacOS VSCode 配置远程服务器ssh remote链接,并上传文件文件服务器

    环境: MacOS VSCode ssh remote 1. VSCode安装插件 2. 配置ssh remote链接 配置完保存; 3. 在ssh remote可以查看到配置好的远程连接 右侧两个一个是在当前窗口打开远程链接,一个是在新窗口打开远程连接,选择一个即可,我倾向于选择一个新窗口。 此时,如果远程文件夹是新创建的话

    2024年02月03日
    浏览(66)
  • SpringBoot上传文件到Minio服务器,支持批量上传

    本文主要介绍如何使用SpringBoot上传到minio服务器。 没什么可多说的,公司用什么咱们开发研究什么就完事了。直接分享核心代码。 minio依赖 配置文件 首先是核心的参数,包括服务器minio地址,以及用户名密码,使用的桶名称 controller代码 如果只需要上传文件,只需要Multipa

    2024年02月08日
    浏览(51)
  • java上传文件到指定服务器

    首先要知道服务器的用户名和密码。 注意:一般情况,如果不是强制要求,尽量不要将文件上传到服务器 步骤: 1.导入依赖 !--图片上传到服务器需要的依赖--         dependency             groupIdcom.jcraft/groupId             artifactIdjsch/artifactId             version0.1.54/version

    2024年01月21日
    浏览(53)
  • JAVA实现文件上传到服务器

    java如何实现大文件断点续传、秒传,JAVA实现文件上传到服务器,jsp实现文件上传到服务器,SpringBoot实现文件上传到服务器,SpringMVC实现文件上传到服务器,SpringCloud实现文件上传到服务器,webuploader实现文件上传到服务器,百度webuploader实现文件上传到服务器,JAVA如何将文件

    2024年04月27日
    浏览(64)
  • 上传本地文件到HDFS服务器

    在这篇文章中,我将详细介绍如何将本地文件上传到HDFS(分布式文件系统)服务器。我们将使用Hadoop命令行工具来完成这个任务。 首先,确保你已经安装了Hadoop并且HDFS服务器正在运行。接下来,我们将按照以下步骤进行操作: 步骤 1: 检查HDFS文件系统 在上传文件之前,我们

    2024年02月04日
    浏览(50)
  • mac PyCharm 上传文件到远程服务器+远程服务器下载到本地

    选择SFTP name:test6 输入ssh账号和密码。保存密码和30s心跳。 Local path(本地mac机器):/Users/clevercode/PycharmProjects/test6 Root path(远程服务机器):/home/clevercode/test6 Root path(远程服务机器):/home/clevercode/test6 [2024/1/18, 10:56 AM] Upload file ‘/Users/clevercode/PycharmProjects/test6/f100.py’ t

    2024年01月19日
    浏览(88)
  • Unity如何上传一个文件到服务器

    在游戏开发过程中,有时候需要上传一些文件到远程服务器上,比如游戏资源文件、玩家数据等等。在Unity中,我们可以使用UnityWebRequest类来实现文件上传功能。本文将详细介绍Unity如何上传一个文件到服务器,并给出Unity与服务器的核心代码实现。 对啦!这里有个游戏开发交

    2023年04月18日
    浏览(68)
  • springmvc上传多文件到指定服务器

    package com.store.liqiang.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; public class FileUpload { @SuppressWarnin

    2024年04月15日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包