Skip to content

Commit

Permalink
Improving handling to hang on fileUrl on GraphQLFile.
Browse files Browse the repository at this point in the history
  • Loading branch information
josueruiz7 committed Mar 17, 2020
1 parent 0118b47 commit 1ffda32
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
35 changes: 27 additions & 8 deletions Sources/Apollo/GraphQLFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ public struct GraphQLFile {
public let fieldName: String
public let originalName: String
public let mimeType: String
public let data: Data
public let data: Data?
public let fileURL: URL?
public let contentLength: UInt64

/// A convenience constant for declaring your mimetype is octet-stream.
Expand All @@ -26,6 +27,7 @@ public struct GraphQLFile {
self.originalName = originalName
self.mimeType = mimeType
self.data = data
self.fileURL = nil
self.contentLength = UInt64(data.count)
}

Expand All @@ -41,19 +43,36 @@ public struct GraphQLFile {
originalName: String,
mimeType: String = GraphQLFile.octetStreamMimeType,
fileURL: URL) {
guard let fileData = try? Data(contentsOf: fileURL) else {
return nil
guard let contentLength = GraphQLFile.getFileSize(fileURL: fileURL) else {
return nil
}

self.init(fieldName: fieldName,
originalName: originalName,
mimeType: mimeType,
data: fileData)
self.fieldName = fieldName
self.originalName = originalName
self.mimeType = mimeType
self.data = nil
self.fileURL = fileURL
self.contentLength = contentLength
}

/// Retrieves the InputStream
///
public func generateInputStream() -> InputStream {
public func generateInputStream() throws -> InputStream {
if let data = data {
return InputStream(data: data)
} else if let fileURL = fileURL, let inputStream = InputStream(url: fileURL) {
return inputStream
}

throw GraphQLError("InputStream was not created.")
}

private static func getFileSize(fileURL: URL) -> UInt64? {
guard let fileSizeAttribute = try? FileManager.default.attributesOfItem(atPath: fileURL.path)[.size],
let fileSize = fileSizeAttribute as? NSNumber else {
return nil
}

return fileSize.uint64Value
}
}
2 changes: 1 addition & 1 deletion Sources/Apollo/RequestCreator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ extension RequestCreator {
formData.appendPart(data: mapData, name: "map")

for (index, file) in files.enumerated() {
formData.appendPart(inputStream: file.generateInputStream(),
formData.appendPart(inputStream: try file.generateInputStream(),
contentLength: file.contentLength,
name: "\(index)",
contentType: file.mimeType,
Expand Down
4 changes: 2 additions & 2 deletions Tests/ApolloTests/TestCustomRequestCreator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ struct TestCustomRequestCreator: RequestCreator {
}
}

files.forEach {
formData.appendPart(inputStream: $0.generateInputStream(), contentLength: $0.contentLength, name: $0.fieldName, contentType: $0.mimeType, filename: $0.originalName)
try files.forEach {
formData.appendPart(inputStream: try $0.generateInputStream(), contentLength: $0.contentLength, name: $0.fieldName, contentType: $0.mimeType, filename: $0.originalName)
}

return formData
Expand Down

0 comments on commit 1ffda32

Please sign in to comment.