@@ -5,7 +5,8 @@ public struct GraphQLFile {
55 public let fieldName : String
66 public let originalName : String
77 public let mimeType : String
8- public let data : Data
8+ public let data : Data ?
9+ public let fileURL : URL ?
910 public let contentLength : UInt64
1011
1112 /// A convenience constant for declaring your mimetype is octet-stream.
@@ -26,6 +27,7 @@ public struct GraphQLFile {
2627 self . originalName = originalName
2728 self . mimeType = mimeType
2829 self . data = data
30+ self . fileURL = nil
2931 self . contentLength = UInt64 ( data. count)
3032 }
3133
@@ -41,19 +43,36 @@ public struct GraphQLFile {
4143 originalName: String ,
4244 mimeType: String = GraphQLFile . octetStreamMimeType,
4345 fileURL: URL ) {
44- guard let fileData = try ? Data ( contentsOf : fileURL) else {
45- return nil
46+ guard let contentLength = GraphQLFile . getFileSize ( fileURL : fileURL) else {
47+ return nil
4648 }
4749
48- self . init ( fieldName: fieldName,
49- originalName: originalName,
50- mimeType: mimeType,
51- data: fileData)
50+ self . fieldName = fieldName
51+ self . originalName = originalName
52+ self . mimeType = mimeType
53+ self . data = nil
54+ self . fileURL = fileURL
55+ self . contentLength = contentLength
5256 }
5357
5458 /// Retrieves the InputStream
5559 ///
56- public func generateInputStream( ) -> InputStream {
60+ public func generateInputStream( ) throws -> InputStream {
61+ if let data = data {
5762 return InputStream ( data: data)
63+ } else if let fileURL = fileURL, let inputStream = InputStream ( url: fileURL) {
64+ return inputStream
65+ }
66+
67+ throw GraphQLError ( " InputStream was not created. " )
68+ }
69+
70+ private static func getFileSize( fileURL: URL ) -> UInt64 ? {
71+ guard let fileSizeAttribute = try ? FileManager . default. attributesOfItem ( atPath: fileURL. path) [ . size] ,
72+ let fileSize = fileSizeAttribute as? NSNumber else {
73+ return nil
74+ }
75+
76+ return fileSize. uint64Value
5877 }
5978}
0 commit comments