Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Alamofire v4,Swift v3将Sqlite文件上载到域_Sqlite_File Upload_Swift3_Alamofire - Fatal编程技术网

Alamofire v4,Swift v3将Sqlite文件上载到域

Alamofire v4,Swift v3将Sqlite文件上载到域,sqlite,file-upload,swift3,alamofire,Sqlite,File Upload,Swift3,Alamofire,我正试图使用Alamofire 4.0将一个Sqlite数据库从IOS Swift 3上传到我的服务器,但在将Sqlite文件转换为上传所需的数据类型时遇到问题 大多数帖子/问题示例似乎默认为上载图像,但我很难找到上载sqlite或其他文件类型的示例(用于备份) 我已经搜索了基本代码,到目前为止发现这看起来非常合理(感谢下面的帖子:) 我正在努力解决的部分是将sqlite文件附加到上传文件(multipartFormData.append(………?),我已经搜索过了,但没有找到任何好的参考文章

我正试图使用Alamofire 4.0将一个Sqlite数据库从IOS Swift 3上传到我的服务器,但在将Sqlite文件转换为上传所需的数据类型时遇到问题

大多数帖子/问题示例似乎默认为上载图像,但我很难找到上载sqlite或其他文件类型的示例(用于备份)

我已经搜索了基本代码,到目前为止发现这看起来非常合理(感谢下面的帖子:)

我正在努力解决的部分是将sqlite文件附加到上传文件(multipartFormData.append(………?),我已经搜索过了,但没有找到任何好的参考文章


是的,我是一个新手,但是如果我努力尝试,任何帮助都将不胜感激。…

它与图像示例完全相同,只是mime类型将是
应用程序/octet流

此外,您可能会直接从
文件URL
加载它,而不是先将其加载到
数据中

另一方面,该示例中的
参数
没有太大意义,因为它与图像本身上载中提供的文件名看起来是多余的。因此,您可以使用web服务所需的任何参数(如果有)。如果没有其他参数,您只需忽略(键,值){…}的
完全循环

最后,显然要用web服务要查找的任何字段名替换
文件
字段名

// any additional parameters that must be included in the request (if any)

let parameters = ["somekey": "somevalue"]

// database to be uploaded; I'm assuming it's in Documents, but perhaps you have it elsewhere, so build the URL appropriately for where the file is

let filename = "test.sqlite"
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    .appendingPathComponent(filename)

// now initiate request

Alamofire.upload(multipartFormData: { multipartFormData in
    multipartFormData.append(fileURL, withName: "file", fileName: filename, mimeType: "application/octet-stream")

    for (key, value) in parameters {
        multipartFormData.append(value.data(using: .utf8)!, withName: key)
    }
}, to: urlString) { result in
    switch result {
    case .success(let upload, _, _):
        upload
            .authenticate(user: self.user, password: self.password)   // only needed if you're doing server authentication
            .uploadProgress { progress in
                print(progress.fractionCompleted)
            }
            .responseJSON { response in
                print("\(response.result.value)")
        }
    case .failure(let encodingError):
        print(encodingError.localizedDescription)
    }
}

不相关,但如果您不确定要使用哪种mime类型,可以使用此例程,它将尝试从文件扩展名确定mime类型

/// Determine mime type on the basis of extension of a file.
///
/// This requires MobileCoreServices framework.
///
/// - parameter url:  The file `URL` of the local file for which we are going to determine the mime type.
///
/// - returns:        Returns the mime type if successful. Returns application/octet-stream if unable to determine mime type.

func mimeType(for url: URL) -> String {
    let pathExtension = url.pathExtension

    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            return mimetype as String
        }
    }
    return "application/octet-stream";
}

谢谢你的帮助,我认为一切都很好,但在我的匆忙中,我在服务器上读到了错误的目录。文件没有被上传。apple中的代码看起来都很好,但这是创建多部分请求的适当Alamofire代码。当我这样做时,我看到了进度,它出现在我的服务器上。我怀疑服务器上有断开连接的情况e和客户端代码。在没有看到服务器代码的情况下,我不确定是否可以进一步建议您。它看起来确实像服务器prob,但该文件与android和swiftv2(使用SRwebclient)一起工作。完成的“progress.fraction”打印了几次,值为0.01322…然后报告为“nil”:我添加到upload.response:.request.response.data.result.timeline给出:可选({URL:}{状态代码:500,标题{“缓存控制”=私有;连接=关闭;“内容类型”=“text/html”;“X-AspNet-Version”=“4.0.30319”;可选(6411字节)失败-有任何帮助吗?可能只是一些断开连接b/w服务器期望的内容以及此多部分请求的形成方式。我们无法仅通过查看您得到的响应来诊断这一点(尽管如果您查看响应正文的文本,这将提供线索)。可能编辑问题以包含Android代码。或者共享服务器代码。或者使用类似Charles或Wireshark的嗅探器检查格式良好的Android请求的外观。但是这里没有足够的信息进行诊断。我在尝试上载SQLite文件时一定出了问题,因为它失败了。但是,我已成功上载使用此代码生成图像文件和文本文件(更改mimetype)。一切正常,包括用于文件名和文件夹名的参数。net ASP页面完全按照预期处理它们。但是,SQLite文件总是失败。我发现一篇文章谈论mimetype“application/x-sqlite3”但这也失败了。有什么建议吗?谢谢
/// Determine mime type on the basis of extension of a file.
///
/// This requires MobileCoreServices framework.
///
/// - parameter url:  The file `URL` of the local file for which we are going to determine the mime type.
///
/// - returns:        Returns the mime type if successful. Returns application/octet-stream if unable to determine mime type.

func mimeType(for url: URL) -> String {
    let pathExtension = url.pathExtension

    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            return mimetype as String
        }
    }
    return "application/octet-stream";
}