`

用AFNetworking上传文件到node.js server

 
阅读更多

前几天做了一个上传文件的特性,ios端使用的是AFNetworking组件,server端是express

客户端代码:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:UPLOAD_BACKUP_FILE_SERVICE_URL]];
    
    NSDictionary *headers = @{@"Authorization":[NSString stringWithFormat:@"Bearer %@",token], @"custom-enterpriseId":enterpriseId};
    
    for(NSString *zipFileName in sorted){
        
        NSString *zipFilePath = [[YLSGlobalUtils getCurrentEnterpriseDirPath] stringByAppendingPathComponent:zipFileName];
        NSData *zipData = [NSData dataWithContentsOfFile:zipFilePath];
        
        void (^constructingBlock)(id<AFMultipartFormData>)  = ^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileData:zipData name:@"file" fileName:zipFileName mimeType:@"application/zip"];
        };
        
        void (^successBlock)(AFHTTPRequestOperation*, id) = ^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
            [fileManager removeItemAtPath:zipFilePath error:nil];
            [self addBackupRecord];
        };
        
        void (^failureBlock)(AFHTTPRequestOperation*, NSError*) = ^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Error: %@ ***** %@", operation.responseString, error);
            int code = [error code];
            if(3840 == code || -1001 == code){// 3840和-1001错误码小概率出现,文件上传已成功
                [fileManager removeItemAtPath:zipFilePath error:nil];
                [self addBackupRecord];
            }
        };

        AFHTTPRequestOperation *operation = [manager POST:UPLOAD_BACKUP_FILE_SERVICE_URL parameters:headers constructingBodyWithBlock:constructingBlock success:successBlock failure:failureBlock];
        [operation start];
    }

关键在于constructingBlock那个块,里面的name参数要传@"file",与server端的代码对应,server端有以下代码:

req.files.file.path;
req.files.file.name;

req.files.file对象是express包装的,path属性在express里配置:

app.use(express.bodyParser({
                uploadDir: __dirname + '/../var/uploads',
                keepExtensions: true,
                limit: 10000000,
                defer: true
            }));

file.path取的就是uploadDir的值,file.name的值从client传过来,也就是client代码里的name参数

另外,AFNetworking的API,会自动设置boundary,用chunk上传文件,不需要手工编码

分享到:
评论

相关推荐

    Node.js(node-v16.15.1-win-x64.zip)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1-win-x86.zip)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1.pkg)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1.tar.gz 源码)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1-linux-arm64.tar.xz)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Server Side development with Node.js and Koa.js

    This book is the ideal introduction for JavaScript developers who want to create scalable server side applications using Node.js and Koa.js. The book shows you how Koa can be used to start projects ...

    Node.js-server.jsforNode.js一个简单而强大的Node.js服务器

    server.js for Node.js 一个简单而强大的Node.js服务器

    Beginning Node.js

    From this book you will learn how to write maintainable server-side JavaScript using Node.js, how to test your code and deploy it on the internet. Table of Contents Chapter 1: Setting up for Node.js...

    Node.js(node-v16.15.1-aix-ppc64.tar.gz)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js 开发指南.pdf

    3.1 开始用 Node.js编程 24 3.1.1 Hello World 24 3.1.2 Node.js命令行工具 25 3.1.3 建立HTTP服务器 26 3.2 异步式I/O与事件式编程 29 3.2.1 阻塞与线程 29 3.2.2 回调函数 31 3.2.3 事件 33 3.3 ...

    Node.js.By.Example.1784395714.epub

    If you are a JavaScript developer with no experience with Node.js or server-side web development, this book is for you. It will lead you through creating a fairly complex social network. You will ...

    Node.js开发实战详解源代码

    书由浅入深,全面、系统地介绍了Node.js开发技术。书中提供了大量有针对性的实例,供读者实践学习,同时提供了大量的实践练习题及详尽的解答,帮助读者进一步巩固和提高。本书重在代码实践,阅读时应多注重实践编程...

    Node.js(node-v16.15.1-x64.msi)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1-darwin-arm64.tar.gz)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1-linux-x64.tar.xz)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js-node.js七牛云文件上传

    node.js 七牛云文件上传

    Node.js(node-v16.15.1-x86.msi)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    Node.js(node-v16.15.1-linux-armv7l.tar.xz)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    node.docx Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以用于开发服务

    使用文本编辑器创建一个新的 JavaScript 文件,例如 `app.js`,然后编写您的 Node.js 应用程序代码。 ```javascript // 导入 http 模块 const http = require('http'); // 创建 HTTP 服务器 const server = ...

Global site tag (gtag.js) - Google Analytics