2017-03-07 72 views
0

我似乎無法正確上傳照片到Django。這是問題。使用Alamofire 4在Swift 3上傳任何圖片到Django?

request.FILES是空的。然而,在身體中,我看到一堆亂碼(這將是照片數據)。我已經試過這使它工作,但它仍然顯示爲空:

在Django中:

class UploadPhoto(APIView): 
    parser_classes = (MultiPartParser, FormParser,) 
    authentication_classes = (TokenAuthentication,) 
    permission_classes = (IsAuthenticated,) 
    def post(self, request, format=None): 
     print(request.FILES) 
     return Response(status=status.HTTP_200_OK) 

在iOS系統:

func photoUploader(photo: UIImage, completion: @escaping (Bool) -> Void) { 
    let imageData = UIImageJPEGRepresentation(photo, 0.8) 

    guard let authToken = Locksmith.loadDataForUserAccount(userAccount: "userToken")?["token"] as? String else { 
     return 
    } 

    let headers: HTTPHeaders = ["Authorization": authToken] 
    var url: URLRequest? 

    do { 
     url = try URLRequest(url: EntityURLs.uploadPhotoURL, method: .post, headers: headers) 
    } catch { 
     print("Error") 
    } 

    if let url = url { 
     upload(multipartFormData: { (mpd) in 
      mpd.append(imageData!, withName: "file", mimeType: "image/jpeg") 
     }, with: url, encodingCompletion: { (success) in 
      debugPrint(success) 
     }) 
    } 

} 

回答

2

好了,所以正確上傳一個文件的Django使用Alamofire 4.0框架,我忘了添加一件事:文件名。

就我而言,我上傳 「weeknd.jpg」 所以我要改變這一點:

mpd.append(imageData!, withName: "file", mimeType: "image/jpeg") 

這樣:

mpd.append(imageData, withName: "file", fileName: "weeknd.jpg", mimeType: "image/jpeg") 

在Django中,該request.FILES現在顯示爲這樣的:<MultiValueDict: {'file': [<InMemoryUploadedFile: weeknd.jpg (image/jpeg)>]}>

我差不多忘了添加fileName。希望這會幫助某人。