无法在使用 Alamofire 下载的 PDFView IOS 中查看 PDF - SWIFT
Cannot view PDF in PDFView IOS downloaded using Alamofire - SWIFT
我正在尝试从服务器下载一个 pdf 文件并在 ios 的 PDFView 中显示它。我相信我已经成功下载(文件大小为 1.1Mb)它并将其存储在 DocumentsDirectory 中。但是,当我尝试在 PDFView 中显示此 pdf 文件时,我看到一个空白 viewcontroller。下面是我的代码:
我知道我的 UIView 对象已正确连接并正常工作。例如,如果我将 'docURL' 替换为以下文件 URL 我可以查看 PDF 文件:
Bundle.main.url(forResource: "paper", withExtension: "pdf")
SWIFT:
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("pig.pdf")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
Alamofire.download(containerPDFUrl, to: destination).response { response in
print("response downLoadPDFDocument: \(response)")
if response.error == nil, let pdfFilePath = response.destinationURL?.path {
print("inside DispatchQueue")
print("pdfFilePath: \(pdfFilePath)")
DispatchQueue.main.async{
// Instantiate PDFDocument
let docURL = URL.init(string: pdfFilePath)
let pdfDoc = PDFDocument.init(url: docURL!)
self.myPDFView.document = pdfDoc
}
}else{
print("response.error : \(response.error )")
}
}
控制台:
response downLoadPDFDocument: DefaultDownloadResponse(request: Optional(https://myLink/rab1Mpub.pdf), response: Optional(<NSHTTPURLResponse: 0x60c0000302a0> { URL: https://myLink/rab1Mpub.pdf } { Status Code: 200, Headers {
"Accept-Ranges" = (
bytes
);
"Content-Length" = (
1113030
);
"Content-Type" = (
"application/octet-stream"
);
Date = (
"Sun, 18 Mar 2018 10:03:12 GMT"
);
Etag = (
"\"75b5f9132e45870cf1060c7ebfd0ed76\""
);
"Last-Modified" = (
"Mon, 12 Mar 2018 18:42:05 GMT"
);
Server = (
AmazonS3
);
"x-amz-id-2" = (
"KpynA2h+IMZKEk3ErsAAeIuvWOcuqBQMNiiwBV2K4j42TfC5z/ZQihvZFuHb7rHq0ESeKKeeD+s="
);
"x-amz-request-id" = (
F88529EC82881CD2
);
} }), temporaryURL: Optional(file:///Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/tmp/CFNetworkDownload_h2MGIC.tmp), destinationURL: Optional(file:///Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/Documents/pig.pdf), resumeData: nil, error: nil, timeline: Timeline: { "Request Start Time": 543060190.971, "Initial Response Time": 543060192.280, "Request Completed Time": 543060201.253, "Serialization Completed Time": 543060201.253, "Latency": 1.309 secs, "Request Duration": 10.281 secs, "Serialization Duration": 0.000 secs, "Total Duration": 10.281 secs }, _metrics: Optional((Task Interval) <_NSConcreteDateInterval: 0x608000227b00> (Start Date) 2018-03-18 10:03:10 +0000 + (Duration) 10.203282 seconds = (End Date) 2018-03-18 10:03:21 +0000
(Redirect Count) 0
(Transaction Metrics) (Request) <NSURLRequest: 0x608000008110> { URL: https://myLink/rab1Mpub.pdf }
(Response) <NSHTTPURLResponse: 0x608000227700> { URL: https://myLink/rab1Mpub.pdf } { Status Code: 200, Headers {
"Accept-Ranges" = (
bytes
);
"Content-Length" = (
1113030
);
"Content-Type" = (
"application/octet-stream"
);
Date = (
"Sun, 18 Mar 2018 10:03:12 GMT"
);
Etag = (
"\"75b5f9132e45870cf1060c7ebfd0ed76\""
);
"Last-Modified" = (
"Mon, 12 Mar 2018 18:42:05 GMT"
);
Server = (
AmazonS3
);
"x-amz-id-2" = (
"KpynA2h+IMZKEk3ErsAAeIuvWOcuqBQMNiiwBV2K4j42TfC5z/ZQihvZFuHb7rHq0ESeKKeeD+s="
);
"x-amz-request-id" = (
F88529EC82881CD2
);
} }
(Fetch Start) 2018-03-18 10:03:10 +0000
(Domain Lookup Start) 2018-03-18 10:03:10 +0000
(Domain Lookup End) 2018-03-18 10:03:11 +0000
(Connect Start) 2018-03-18 10:03:11 +0000
(Secure Connection Start) 2018-03-18 10:03:11 +0000
(Secure Connection End) 2018-03-18 10:03:11 +0000
(Connect End) 2018-03-18 10:03:11 +0000
(Request Start) 2018-03-18 10:03:11 +0000
(Request End) 2018-03-18 10:03:11 +0000
(Response Start) 2018-03-18 10:03:11 +0000
(Response End) 2018-03-18 10:03:21 +0000
(Protocol Name) http/1.1
(Proxy Connection) NO
(Reused Connection) NO
(Fetch Type) Network Load
))
inside DispatchQueue
pdfFilePath:
/Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/Documents/pig.pdf
2018-03-18 10:03:27.341067+0000 labbook[38709:4229832] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2018-03-18 10:04:06.253109+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
2018-03-18 10:04:06.253340+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
2018-03-18 10:04:06.253512+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
PDFDocument(url: URL)
只接受一个文件 URL
,但是在你的代码中你说:
let fileURL = URL.init(string: self.containerPDFUrl)
let pdfDoc = PDFDocument.init(url: fileURL!)
你说 self.containerPDFUrl
是
类型
但这不是文件 url。我相信你打算:
let pdfDoc = PDFDocument(url: self.destination.0)
但是 let fileURL = documentsURL.appendingPathComponent("pig.png")
应该是 let fileURL = documentsURL.appendingPathComponent("pig.pdf")
更新
if response.error == nil, let pdfFilePath = response.destinationURL?.path {
print("inside DispatchQueue")
print("pdfFilePath: \(pdfFilePath)")
DispatchQueue.main.async{
// Instantiate PDFDocument
let docURL = URL.init(string: pdfFilePath)
let pdfDoc = PDFDocument.init(url: docURL!)
self.myPDFView.document = pdfDoc
}
}
这里不需要处理路径。只需获取 destinationURL
并从中初始化文档。例如:
if response.error == nil, let pdfURL = response.destinationURL? {
DispatchQueue.main.async{
// Instantiate PDFDocument
let pdfDoc = PDFDocument(url: pdfURL)
self.myPDFView.document = pdfDoc
}
}
我正在尝试从服务器下载一个 pdf 文件并在 ios 的 PDFView 中显示它。我相信我已经成功下载(文件大小为 1.1Mb)它并将其存储在 DocumentsDirectory 中。但是,当我尝试在 PDFView 中显示此 pdf 文件时,我看到一个空白 viewcontroller。下面是我的代码:
我知道我的 UIView 对象已正确连接并正常工作。例如,如果我将 'docURL' 替换为以下文件 URL 我可以查看 PDF 文件:
Bundle.main.url(forResource: "paper", withExtension: "pdf")
SWIFT:
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("pig.pdf")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
Alamofire.download(containerPDFUrl, to: destination).response { response in
print("response downLoadPDFDocument: \(response)")
if response.error == nil, let pdfFilePath = response.destinationURL?.path {
print("inside DispatchQueue")
print("pdfFilePath: \(pdfFilePath)")
DispatchQueue.main.async{
// Instantiate PDFDocument
let docURL = URL.init(string: pdfFilePath)
let pdfDoc = PDFDocument.init(url: docURL!)
self.myPDFView.document = pdfDoc
}
}else{
print("response.error : \(response.error )")
}
}
控制台:
response downLoadPDFDocument: DefaultDownloadResponse(request: Optional(https://myLink/rab1Mpub.pdf), response: Optional(<NSHTTPURLResponse: 0x60c0000302a0> { URL: https://myLink/rab1Mpub.pdf } { Status Code: 200, Headers {
"Accept-Ranges" = (
bytes
);
"Content-Length" = (
1113030
);
"Content-Type" = (
"application/octet-stream"
);
Date = (
"Sun, 18 Mar 2018 10:03:12 GMT"
);
Etag = (
"\"75b5f9132e45870cf1060c7ebfd0ed76\""
);
"Last-Modified" = (
"Mon, 12 Mar 2018 18:42:05 GMT"
);
Server = (
AmazonS3
);
"x-amz-id-2" = (
"KpynA2h+IMZKEk3ErsAAeIuvWOcuqBQMNiiwBV2K4j42TfC5z/ZQihvZFuHb7rHq0ESeKKeeD+s="
);
"x-amz-request-id" = (
F88529EC82881CD2
);
} }), temporaryURL: Optional(file:///Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/tmp/CFNetworkDownload_h2MGIC.tmp), destinationURL: Optional(file:///Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/Documents/pig.pdf), resumeData: nil, error: nil, timeline: Timeline: { "Request Start Time": 543060190.971, "Initial Response Time": 543060192.280, "Request Completed Time": 543060201.253, "Serialization Completed Time": 543060201.253, "Latency": 1.309 secs, "Request Duration": 10.281 secs, "Serialization Duration": 0.000 secs, "Total Duration": 10.281 secs }, _metrics: Optional((Task Interval) <_NSConcreteDateInterval: 0x608000227b00> (Start Date) 2018-03-18 10:03:10 +0000 + (Duration) 10.203282 seconds = (End Date) 2018-03-18 10:03:21 +0000
(Redirect Count) 0
(Transaction Metrics) (Request) <NSURLRequest: 0x608000008110> { URL: https://myLink/rab1Mpub.pdf }
(Response) <NSHTTPURLResponse: 0x608000227700> { URL: https://myLink/rab1Mpub.pdf } { Status Code: 200, Headers {
"Accept-Ranges" = (
bytes
);
"Content-Length" = (
1113030
);
"Content-Type" = (
"application/octet-stream"
);
Date = (
"Sun, 18 Mar 2018 10:03:12 GMT"
);
Etag = (
"\"75b5f9132e45870cf1060c7ebfd0ed76\""
);
"Last-Modified" = (
"Mon, 12 Mar 2018 18:42:05 GMT"
);
Server = (
AmazonS3
);
"x-amz-id-2" = (
"KpynA2h+IMZKEk3ErsAAeIuvWOcuqBQMNiiwBV2K4j42TfC5z/ZQihvZFuHb7rHq0ESeKKeeD+s="
);
"x-amz-request-id" = (
F88529EC82881CD2
);
} }
(Fetch Start) 2018-03-18 10:03:10 +0000
(Domain Lookup Start) 2018-03-18 10:03:10 +0000
(Domain Lookup End) 2018-03-18 10:03:11 +0000
(Connect Start) 2018-03-18 10:03:11 +0000
(Secure Connection Start) 2018-03-18 10:03:11 +0000
(Secure Connection End) 2018-03-18 10:03:11 +0000
(Connect End) 2018-03-18 10:03:11 +0000
(Request Start) 2018-03-18 10:03:11 +0000
(Request End) 2018-03-18 10:03:11 +0000
(Response Start) 2018-03-18 10:03:11 +0000
(Response End) 2018-03-18 10:03:21 +0000
(Protocol Name) http/1.1
(Proxy Connection) NO
(Reused Connection) NO
(Fetch Type) Network Load
))
inside DispatchQueue
pdfFilePath:
/Users/myName/Library/Developer/CoreSimulator/Devices/7EBBAD08-6C66-4108-AB24-DEA8892E207A/data/Containers/Data/Application/6BBA1B08-9F77-4509-952C-7F7528DAE855/Documents/pig.pdf
2018-03-18 10:03:27.341067+0000 labbook[38709:4229832] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2018-03-18 10:04:06.253109+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
2018-03-18 10:04:06.253340+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
2018-03-18 10:04:06.253512+0000 labbook[38709:4231789] TIC Read Status [1:0x608000167800]: 1:57
PDFDocument(url: URL)
只接受一个文件 URL
,但是在你的代码中你说:
let fileURL = URL.init(string: self.containerPDFUrl)
let pdfDoc = PDFDocument.init(url: fileURL!)
你说 self.containerPDFUrl
是
但这不是文件 url。我相信你打算:
let pdfDoc = PDFDocument(url: self.destination.0)
但是 let fileURL = documentsURL.appendingPathComponent("pig.png")
应该是 let fileURL = documentsURL.appendingPathComponent("pig.pdf")
更新
if response.error == nil, let pdfFilePath = response.destinationURL?.path {
print("inside DispatchQueue")
print("pdfFilePath: \(pdfFilePath)")
DispatchQueue.main.async{
// Instantiate PDFDocument
let docURL = URL.init(string: pdfFilePath)
let pdfDoc = PDFDocument.init(url: docURL!)
self.myPDFView.document = pdfDoc
}
}
这里不需要处理路径。只需获取 destinationURL
并从中初始化文档。例如:
if response.error == nil, let pdfURL = response.destinationURL? {
DispatchQueue.main.async{
// Instantiate PDFDocument
let pdfDoc = PDFDocument(url: pdfURL)
self.myPDFView.document = pdfDoc
}
}