使用Alamofire和Multer上传文件(Uploading files with Alamofire and Multer)
我正在尝试使用Alamofire将图像数据从iOS上传到带有Multer的Express服务器。
req.file
未定义,req.body
的格式为{ file: <bytes> }
。 没有错误消息,但文件未显示。 这是我的代码:var bodyParser = require('body-parser') var multer = require('multer') app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.post('/api/photos/upload', function(req, res) { var upload = multer({ dest: 'public/images/content/'}).single('file') upload(req, res, function(err) { if (err) { console.log("Error uploading file: " + err) return } // req.file = req.body console.log(req.body) // form fields console.log(req.file) // form file }) res.json('yeah') })
在iOS上:
let url = fullURL("api/photos/upload") Alamofire.upload(.POST, url, multipartFormData: { multipartFormData in if let image = image { if let imageData = UIImageJPEGRepresentation(image, 0.5) { multipartFormData.appendBodyPart(data: imageData, name: "file") } } }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseJSON { response in switch response.result { case .Success: print("success") case .Failure(let error): print(error) } } case .Failure(let encodingError): print(encodingError) } })
这让我困惑了好几个小时,非常感谢任何帮助!
更新 HTML表单在Express端点上工作正常,因此它绝对是Alamofire发送请求的问题。 我尝试了一些使用Alamofire上传的例子,但他们都发送了相同的错误请求。 必须有一种方法可以与HTML表单进行相同的请求,但使用Alamofire。
另一个更新
我现在只是使用busboy-connect,它运行良好,并且具有更大的灵活性。I'm trying to upload image data from iOS using Alamofire to an Express server with Multer.
req.file
is undefined, andreq.body
is in the form{ file: <bytes> }
. There is no error message, but the file does not appear. Here is my code:var bodyParser = require('body-parser') var multer = require('multer') app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.post('/api/photos/upload', function(req, res) { var upload = multer({ dest: 'public/images/content/'}).single('file') upload(req, res, function(err) { if (err) { console.log("Error uploading file: " + err) return } // req.file = req.body console.log(req.body) // form fields console.log(req.file) // form file }) res.json('yeah') })
On iOS:
let url = fullURL("api/photos/upload") Alamofire.upload(.POST, url, multipartFormData: { multipartFormData in if let image = image { if let imageData = UIImageJPEGRepresentation(image, 0.5) { multipartFormData.appendBodyPart(data: imageData, name: "file") } } }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseJSON { response in switch response.result { case .Success: print("success") case .Failure(let error): print(error) } } case .Failure(let encodingError): print(encodingError) } })
This has puzzled me for hours, any help is greatly appreciated!
UPDATE An HTML form worked fine through the Express endpoint, so it's definitely a problem with the request Alamofire is sending. I've tried a bunch of examples of uploading with Alamofire, but they all send the same incorrect request. There must be a way to make the same request as an HTML form but with Alamofire.
ANOTHER UPDATE
I'm now just using busboy-connect and it's working well, and with a lot more flexibility.
原文:https://stackoverflow.com/questions/35532581
最满意答案
您需要更改
all
,sequence
,并在field
和fields
之间创建选择。 第2.7节构建 XML Schema Primer的内容模型给出了以这种方式使用序列和选择的示例。我还建议在其他地方定义
field
,并使用xs:element/@ref
指向它,这样就不会重复它。You need to change
all
, tosequence
, and create a choice betweenfield
andfields
. Section 2.7 building content models of the XML Schema Primer gives an example of using sequence and choice in this way.I would also recommend defining
field
elsewhere, and usingxs:element/@ref
to point to it, so that you don't repeat it.
相关问答
更多-
什么是xsd[2022-04-10]
XML结构定义 ( XML Schemas Definition ) XML Schema 是DTD的替代品。XML Schema语言也就是XSD。 作用 XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。 其他 ... -
什么是xsd文件?[2023-11-14]
简单说...就是验证是xml是否规范的语法 -
什么是xsd文件?[2022-03-21]
xsd是来规定XML的,xsd 是Schema的一种。xsd是用来验证数据是否正确,比如你的XML数据要写进数据库,如果不验证,可能就会有很多问题。当你的XML通过XSD验证后,就可以用XSL进行格式化。生成HTML,矢量图形等。 -
XSD模式中的正则表达式:两个组合元素的混合和最大大小(Regular expression in XSD schema: mix and max size of two combined elements)[2022-07-13]
^和$不用于XSD中的正则表达式 - 它始终与开始和结束匹配,就好像它们在那里一样。 因此,只是省略它们: [a-zA-Z\-]{0,64}\.[a-zA-Z\-]{0,64} 并逃避. (或者用NullUserException表示的字符类)。 从XML Schema第2部分:数据类型规范: 与一些流行的正则表达式语言(包括由Perl和标准的Unix工具定义的语言)不同,这里定义的正则表达式语言隐含地将所有正则表达式锚定在头部和尾部,因为模式中正则表达式的最常见用法是匹配完整的文字。 他们的例子是使用A ... -
XML Schema通过声明具有mixed="true"的complexType来为混合内容提供有限的支持,但是您不能进一步约束混合内容中的文本节点与类型。 您只能将简单类型应用于简单内容。 XML Schema provides limited support for mixed content by declaring a complexType with mixed="true", but you can't further constrain the text nodes in mixed cont ...
-
是的,您正在描述混合内容 ,可以通过xs:complexType上的mixed="true"指定:我相信XS和XSD在这里有点无关紧要。 两者实际上都是名称空间前缀,它们引用相同的名称空间。 这篇文章对此进行了描述。 如果您查看您引用的网站上的示例( http://www.w3schools.com/schema/default.asp ),您会看到xs名称空间前缀是指http://www.w3.org/2001/XMLSchema与Tridion架构中的xsd相同。 例如 的xmlns:XSD = “http://www.w3.org/2001/XMLSchema” 的xmlns:XS = “http ...
如何在XSD中混合指标(How to mix indicators in XSD)[2024-03-22]
您需要更改all , sequence ,并在field和fields之间创建选择。 第2.7节构建 XML Schema Primer的内容模型给出了以这种方式使用序列和选择的示例。 我还建议在其他地方定义field ,并使用xs:element/@ref指向它,这样就不会重复它。 You need to change all, to sequence, and create a choice between field and fields. Section 2.7 building content m ...如果希望为不使用名称空间的XSD提供位置提示,则必须使用noNamespaceSchemaLocation属性。 示例(来自链接资源):John 59 答对了! 在与XSD进行了很多战斗后,我发现了一个无错误的方法: 这是代码: 您需要将xs:import更改为xs:include 从xs:include行中删除namespace=""和xmlns:xs="http://www.w3.org/2001/XMLSchema" MESSAGE1.xsd相关文章
更多- elasticsearch too many open files
- Hadoop Java程序-files功能测试
- flume写入Hadoop hdfs报错 Too many open files
- Spring MVC文件上传
- HttpClient 上传文件
- HTML5+Springmvc实现拖拽文件上传
- Spring Boot上传文件示例
- 关于一个文件上传的问题
- 问题:关于TXT文件的上传和读取。
- fancyupload实现文件上传问题
最新问答
更多- 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
- 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
- OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
- 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
- codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
- 在计算机拍照在哪里进入
- 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
- No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
- 单页应用程序:页面重新加载(Single Page Application: page reload)
- 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
- System.StackOverflow错误(System.StackOverflow error)
- KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- C#类名中允许哪些字符?(What characters are allowed in C# class name?)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 在Angular 5中不是一个函数(is not a function in Angular 5)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- 常见的python rpc和cli接口(Common python rpc and cli interface)
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)