gpt4 book ai didi

c# - Swift 将具有关联参数的多个文件上传到 ASP.NET 方法

转载 作者:行者123 更新时间:2023-11-29 05:57:15 25 4
gpt4 key购买 nike

我正在尝试将带有参数的多个文件上传到 ASP.NET 方法,ASP.NET 方法需要一个类列表,我能够发送 ASP.NET 所期望的内容,但我的 HttpPostedFile 为 null : (我的问题是我在 iOS 端做错了什么?这是我用 swift 编写的 iOS 函数:

func saveQAPhotos(_ cellHolder: Array<PhotoClass>, completion: @escaping (_ result: String) -> Void)
{


//Define Array of Dictionary

var jsonArrayOfDictionaries = [[AnyHashable: Any]]()

//For each item in the cellHolder

for i in 0..<cellHolder.count {

//Define Dictionary for grading data

var jsonDict = [AnyHashable: Any]()

jsonDict["job"] = cellHolder[i].job

jsonDict["imageBytes"] = cellHolder[i].photo!.base64EncodedString().addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

jsonDict["createdBy"] = appDelegate.username

jsonDict["itemId"] = cellHolder[i].itemId

jsonArrayOfDictionaries.append(jsonDict)

jsonDict = [AnyHashable: Any]()

}

let jsonData: Data? = try? JSONSerialization.data(withJSONObject: jsonArrayOfDictionaries, options: .prettyPrinted)

let urlComponents = NSURLComponents(string: webservice + "uploadQAImage");

urlComponents?.user = appDelegate.username;

urlComponents?.password = appDelegate.password;

let url = urlComponents?.url;

var request = URLRequest(url: url!)

request.setValue("application/json", forHTTPHeaderField: "Content-Type")

request.setValue("application/json", forHTTPHeaderField: "Accept")

request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"

request.httpBody = jsonData

URLSession.shared.dataTask(with: request, completionHandler: {
(data, response, error) in

if(error != nil){

completion((error?.localizedDescription)!)

}else{

let responseString = String(data: data!, encoding: .utf8)

OperationQueue.main.addOperation({

completion(responseString!)

})
}

}).resume()
}

这是我的一些 ASP.NET 方法:

public string uploadQAImage(List<FileUploadClass> fileUploads) {

for (int i = 0; i < fileUploads.Count; i++) {
HttpPostedFile hfc = fileUploads[i].imageBytes;
}

}

当我向它发送相关文件的 iOS 数据时,hfc 始终为空。我的应用程序上确实安装了 Alamofire,我可以使用它,但是我可以使用上传方法来发送 ASP.NET 所期望的内容吗?

这是我的模型

public class FileUploadClass
{
public string job { get; set; }
public string createdBy { get; set; }
public HttpPostedFile imageBytes { get; set; }
public int itemId { get; set; }

}

这是我的 swift 类(class)

class PhotoClass: NSObject {

var job: String?

var photo: Data?

var itemId: Int?

init(job: String?, photo: Data, itemId: Int?)
{
self.job = job

self.photo = photo

self.itemId = itemId
}

}

最佳答案

根据to the documentationHttpPostedFile 的预期格式为 MIME multipart/form-data:

Files are uploaded in MIME multipart/form-data format. By default, all requests, including form fields and uploaded files, larger than 256 KB are buffered to disk, rather than held in server memory.

您正在发送某种 JSON 格式的 POST 正文并将其称为多部分,但您实际上需要发送多部分 MIME。描述多部分 MIME 格式的 RFC 位于:https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

不幸的是,我没有使用任何可以为您进行此编码的库。这个看起来很容易使用:https://github.com/Fyrts/Multipart -- 这是一个例子:

import Multipart

let fileContents = try! Data(contentsOf: URL(string: "/Users/user/Desktop/document.pdf")!)

var message = Multipart(type: .formData)
message.append(Part.FormData(name: "message", value: "See attached file."))
message.append(Part.FormData(name: "file", fileData: fileContents, fileName: "document.pdf", contentType: "application/pdf"))

var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
request.setMultipartBody(message)

URLSession.shared.dataTask(with: request) { data, response, error in
print(data, response, error)
}.resume()

关于c# - Swift 将具有关联参数的多个文件上传到 ASP.NET 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com