2017-06-18 52 views
0

我從Swift應用上傳圖片到Django服務器時出錯,但我無法理解錯誤的含義。 回溯是當我從Swift應用上傳圖片到服務器時出現錯誤

objc[31747]: Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x11aa7d998) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x119968880). One of the two will be used. Which one is undefined. 
2017-06-16 23:11:52.837756 Kenshin_Swift[31747:1350088] [Generic] Creating an image format with an unknown type is an error 
2017-06-16 23:11:54.274757 Kenshin_Swift[31747:1350153] [] nw_socket_get_input_frames recvmsg(fd 13, 1024 bytes): [54] Connection reset by peer 
2017-06-16 23:11:54.276896 Kenshin_Swift[31747:1350153] [] nw_endpoint_flow_prepare_output_frames [1 127.0.0.1:8000 ready socket-flow (satisfied)] Failed to use 1 frames, marking as failed 
2017-06-16 23:11:54.277301 Kenshin_Swift[31747:1350153] [] nw_socket_write_close shutdown(13, SHUT_WR): [57] Socket is not connected 
2017-06-16 23:11:54.277684 Kenshin_Swift[31747:1350153] [] nw_endpoint_flow_service_writes [1 127.0.0.1:8000 ready socket-flow (satisfied)] Write request has 0 frame count, 0 byte count 
2017-06-16 23:11:54.278467 Kenshin_Swift[31747:1350154] [] __tcp_connection_write_eof_block_invoke Write close callback received error: [89] Operation canceled 
error=Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x60800025cda0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://127.0.0.1:8000/accounts/upload_save/, NSErrorFailingURLKey=http://127.0.0.1:8000/accounts/upload_save/, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.}) 

我寫了斯威夫特正確的網址,用來上傳圖片和網址可通過服務器正在運行python manage.py runserver 0.0.0.0:8000訪問,並且我跑我的服務器能夠從其他設備和訪問它是指在Xcode(這不是我的iPhone模擬器) 所以,我不知道這個錯誤的意思模擬器,我應該做些什麼來解決?斯威夫特代碼

func myImageUploadRequest() 
    { 

     let myUrl = NSURL(string: "http://127.0.0.1:8000/accounts/upload_save/"); 
     //let myUrl = NSURL(string: "http://www.boredwear.com/utils/postImage.php"); 

     let request = NSMutableURLRequest(url:myUrl! as URL); 
     request.httpMethod = "POST"; 
     //ユーザーごとに割り振りたい 
     let param = [ 
      "firstName" : "Sergey", 
      "lastName" : "Kargopolov", 
      "userId" : "9" 
     ] 

     let boundary = generateBoundaryString() 

     request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 

     guard let myImage = myImageView.image else { 
      return 
     } 

     let imageData = UIImageJPEGRepresentation(myImageView.image!, 1) 

     if(imageData==nil) { return; } 

     request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data 


     myActivityIndicator.startAnimating(); 

     let task = URLSession.shared.dataTask(with: request as URLRequest) { 
      data, response, error in 

      if error != nil { 
       print("error=\(error)") 
       return 
      } 

      // You can print out response object 
      print("******* response = \(response)") 

      // Print out reponse body 
      let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
      print("****** response data = \(responseString!)") 

      do { 
       let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary 


       DispatchQueue.main.async { 
        self.myActivityIndicator.stopAnimating() 
        self.myImageView.image = nil; 
       } 

      }catch 
      { 
       print(error) 
      } 

     } 

     task.resume() 
    } 


    func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 
     let body = NSMutableData(); 

     if parameters != nil { 
      for (key, value) in parameters! { 
       body.appendString(string: "--\(boundary)\r\n") 
       body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
       body.appendString(string: "\(value)\r\n") 
      } 
     } 

     let filename = "user-profile.jpg" 
     let mimetype = "image/jpg" 

     body.appendString(string: "--\(boundary)\r\n") 
     body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 
     body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n") 
     body.append(imageDataKey as Data) 
     body.appendString(string: "\r\n") 



     body.appendString(string: "--\(boundary)--\r\n") 

     return body 
    } 

    func generateBoundaryString() -> String { 
     return "Boundary-\(NSUUID().uuidString)" 
    }  
} 
extension NSMutableData { 
    func appendString(string: String) { 
     let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true) 
     append(data!) 
    } 

而且,我的Django的服務器代碼是

from django.contrib.auth.forms import AuthenticationForm 
from django.contrib.auth.decorators import login_required 
from django.http import HttpResponse 
from django.shortcuts import render, redirect 
from django.views.decorators.http import require_POST 
from .forms import RegisterForm 
from django.contrib.auth import authenticate, login 
from .models import Post 
from .forms import UserImageForm 
from .models import ImageAndUser 

def index(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'registration/accounts/index.html', context) 


@login_required 
def profile(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'registration/accounts/profile.html', context) 


def regist(request): 
    form = RegisterForm(request.POST or None) 
    context = { 
     'form': form, 
    } 
    return render(request, 'registration/accounts/regist.html', context) 

def index(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'registration/accounts/index.html', context) 


@login_required 
def profile(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'registration/accounts/profile.html', context) 


def regist(request): 
    form = RegisterForm(request.POST or None) 
    context = { 
     'form': form, 
    } 
    return render(request, 'registration/accounts/regist.html', context) 


@require_POST 
def regist_save(request): 
    form = RegisterForm(request.POST) 
    if form.is_valid(): 
     user = form.save() 
     login(request, user) 
     context = { 
      'user': request.user, 
     } 
     return redirect('profile') 


    context = { 
     'form': form, 
    } 
    return render(request, 'registration/accounts/regist.html', context) 

@login_required 
def photo(request): 
    d = { 
     'photos': Post.objects.all(), 
    } 
    return render(request, 'registration/accounts/profile.html', d) 


def upload(request, p_id): 
    form = UserImageForm(request.POST or None) 
    d = { 
     'p_id': p_id, 
     'form':form, 
    } 
    return render(request, 'registration/accounts/photo.html', d) 


def upload_save(request): 

    photo_id = request.POST.get("p_id", "") 

    if (photo_id): 
     photo_obj = Post.objects.get(id=photo_id) 
    else: 
     photo_obj = Post() 

    files = request.FILES.getlist("files[]") 


    photo_obj.image = files[0] 
    # photo_obj.image2 = files[1] 
    # photo_obj.image3 = files[2] 

    photo_obj.save() 
    # return render(request, "registration/accounts/photo.html") 

    photos = Post.objects.all() 
    context = { 
     'photos': photos, 
    } 
    return render(request, 'registration/accounts/photo.html', context) 

def kenshinresults(request): 
    d = { 
     'results': results, 
    } 
    return render(request, 'registration/accounts/kenshin_result.html', d) 

def tc(request): 
    tcresults = ImageAndUser.objects.filter(user=request.user).order_by('id').last() 
    d = { 
     'tcresults': tcresults, 
    } 
    return render(request, 'registration/accounts/tc.html', d) 

回答

0

錯誤很簡單,Swift無法訪問127.0.0.1處的IP:端口。

要解決:

  1. 檢查沒有其他服務器監聽127.0.0.1:8000
  2. 轉到http://127.0.0.1:8000地址與您的正常瀏覽器和檢查Django是回答
  3. http://127.0.0.1:8000地址與您的iPhone瀏覽器確認

這可能是127.0.0.1並不意味着Django爲您的iPhone模擬器,嘗試與您的外部IP。

相關問題