Domanda

Mi dispiace, una domanda per principianti: ho una funzione molto semplice nella mia applicazione Django con cui posso caricare un file da un browser Web al mio server (funziona perfettamente!). Ora, invece del browser Web, vorrei usare un iPhone.

Sono rimasto un po 'bloccato perché non so davvero come fornire a Django un modulo valido, cioè abbiamo bisogno di un nome file e enctype = "multipart/forma-data" per quanto ho capito.

Ecco la mia funzione di upload in Django:

class UploadFileForm(forms.Form):
    file  = forms.FileField()

def handle_uploaded_file(f):
    destination = open('uploads/example.txt', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            print form
            print request.FILES
            return HttpResponse('Upload Successful')
    else:
        form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

Il mio modello sembra questo (upload.html):

<form action="" method="post" enctype="multipart/form-data">
    {{ form.file }}
    {{ form.non_field_errors }}
    <input type="submit" value="Upload" />
</form>

Ora, supponiamo che voglio inviare un semplice file TXT dalla mia app per iPhone a Sever.Non so davvero come farlo:

  1. Fornire il nome del file
  2. specificare la enctype e
  3. Assicurati che sia in formato che Django possa leggere

Questo è quanto lontano ho ottenuto:

NSString *fileContents = [self loadTXTFromDisk:@"example.txt"];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
                                initWithURL:[NSURL 
                                             URLWithString:@"http://127.0.0.1:8000/uploadfile/"]];


[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml"   forHTTPHeaderField:@"Content-type"];
[request setValue:[NSString stringWithFormat:@"%d", [fileContents length]] 
                                forHTTPHeaderField:@"Content-length"];
[request setHTTPBody:[fileContents dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *theConnection = [[NSURLConnection alloc] 
                                  initWithRequest:request 
                                  delegate:self];

Tuttavia, Django non sarà tranne questo poiché il modulo che prevede non è valido. Cf. sopra:

form = UploadFileForm(request.POST, request.FILES)
if form.is_valid(): #this will not be true ...

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top