2016-08-23 84 views
0

我想一個PDF文件的NSData以服務器爲POST方法的參數,通過轉換PDF成NSData發送,然後NSDataString如何發送NSData的作爲參數POST方法迅速

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString 
let getPDFPath = paths.stringByAppendingPathComponent("resume.pdf") 
let pdfdata = NSData(contentsOfFile: getPDFPath) 
let dataString: String? = "\(pdfdata!)" 

並上傳與使用NSURLSession這樣的參數,

let request = NSMutableURLRequest(URL: NSURL(string: "http://someurl/pdf.aspx")!) 
request.HTTPMethod = "POST" 
let postString = "pdfdata=\(dataString!)" 
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
       guard error == nil && data != nil else {               // check for fundamental networking error 
        print("error=\(error)") 
        return } 
       if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {   // check for http errors 
       print("statusCode should be 200, but is \(httpStatus.statusCode)") 
       print("response = \(response)") 
       } 
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
       print("responseString = \(responseString)") 
      } 
task.resume() 

但它總是給我錯誤:

Error Domain=NSURLErrorDomain Code=-1005 "The network connection was 
lost." UserInfo={NSUnderlyingError=0x7f8d63f34250 {Error 
Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" 
UserInfo={_kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, 
NSErrorFailingURLStringKey=http://someurl/pdf.aspx, 
NSErrorFailingURLKey=http://someurl/pdf.aspx, 
_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.} 

東西我曾嘗試:

  1. 重新啓動模擬器
  2. 復位模擬器的所有設置
  3. 與Alamofire同樣的錯誤
  4. 嘗試不同的模擬器
  5. 應用傳輸安全性是在info.plist
  6. 只有一個PDF文件(21kb)上傳,其他不是
+0

該錯誤消息說,你的連接丟失。你確定你有一個可用的互聯網連接? – paulvs

+0

是的,pdf下載在同一個網絡上完全正常。 –

回答

2

看起來您的App Transport Security設置不允許您轉到指定的網址。 在應用程式的plist文件插入此:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 
+0

嗨,我也這樣做了,忘記添加它,現在編輯問題。它仍然不起作用 –

1

由於iOS9您需要使用https只是出於安全原因。您可以編輯Info.plist文件併爲您的域添加例外。

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>yourdomain.com</key> 
      <dict> 
       <key>NSExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
      </dict> 
     </dict> 
    </dict> 

瞭解更多關於應用傳輸安全位置: https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

+0

我剛剛嘗試過,它仍然無法正常工作,但上傳了小pdf(20kb),但大(100kb)沒有 –

+0

您是否在Xcode的項目設置中激活了Sandbox? – ok404

+0

不,我沒有,全部關閉 –