I got a lot of invoice file lists in my table view, as well as a lot of download buttons in each cell. When I clicked one of them, it will load the invoice file. But the problem is that the suggested server name is indicated by the server "invoice.pdf" in every file that I downloaded. Therefore, I need to manually edit the file name before I save it in the document after downloading it. So, how to edit the file name manually after it was successfully downloaded and save it in the document as temporary, without using Alamofire.Request.suggestedDownloadDestination .
Here is my download function.
func downloadInvoice(invoice: Invoice, completionHandler: (Double?, NSError?) -> Void) { guard isInvoiceDownloaded(invoice) == false else { completionHandler(1.0, nil) // already have it return } let params = [ "AccessToken" : "xadijdiwjad12121"] // Can't use the destination file anymore because my server only return one file name "invoice.pdf" no matter which file i gonna download // So I have to manually edit my file name which i saved after it was downloaded. let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask) // So I have to save file name like that ""2016_04_02_car_invoice_10021.pdf" [Date_car_invoice_timestamp(Long).pdf] // Please look comment on tableView code Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders?.updateValue("application/pdf",forKey: "Content-Type") Alamofire.download(.POST, invoice.url,parameters:params, destination: destination) .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in print(totalBytesRead) dispatch_async(dispatch_get_main_queue()) { let progress = Double(totalBytesRead) / Double(totalBytesExpectedToRead) completionHandler(progress, nil) } } .responseString { response in print(response.result.error) completionHandler(nil, response.result.error) } }
Here is a table view that will check the downloaded file, and when it clicks, it is displayed in the open function.
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if let invoice = dataController.invoices?[indexPath.row] { dataController.downloadInvoice(invoice) { progress, error in // TODO: handle error print(progress) print(error) if (progress < 1.0) { if let cell = self.tableView.cellForRowAtIndexPath(indexPath), invoiceCell = cell as? InvoiceCell, progressValue = progress { invoiceCell.progressBar.hidden = false invoiceCell.progressBar.progress = Float(progressValue) invoiceCell.setNeedsDisplay() } } if (progress == 1.0) { // Here where i gonna get the downloaded file name from my model. // invoice.filename = (Assume "2016_04_02_car_invoice_10021") if let filename = invoice.filename{ let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let docs = paths[0] let pathURL = NSURL(fileURLWithPath: docs, isDirectory: true) let fileURL = NSURL(fileURLWithPath: filename, isDirectory: false, relativeToURL: pathURL) self.docController = UIDocumentInteractionController(URL: fileURL) self.docController?.delegate = self if let cell = self.tableView.cellForRowAtIndexPath(indexPath) { self.docController?.presentOptionsMenuFromRect(cell.frame, inView: self.tableView, animated: true) if let invoiceCell = cell as? InvoiceCell { invoiceCell.accessoryType = .Checkmark invoiceCell.setNeedsDisplay() } } } } } } }
So my question is simple. I just don't want to use this code
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
because it uses response.sposedfilename.And I want to save the file name manually in the selected data of the table cell. Any help? Please do not mind that I posted the code in my question, because I want everyone to see it clearly.