Carica file da iPhone a Django
-
12-11-2019 - |
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:
- Fornire il nome del file
- specificare la
enctype
e - 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