Извините, вопрос новичка: у меня в приложении Django есть очень простая функция, с помощью которой я могу загрузить файл из веб-браузера на свой сервер (работает отлично!).Теперь вместо веб-браузера я бы хотел использовать iPhone.
Я немного застрял, так как не знаю, как предоставить Django правильную форму, то есть, насколько я понимаю, нам нужны имя файла и enctype = "multipart / form-data".
Вот моя функция загрузки в 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})
Мой шаблон выглядит следующим образом (upload.html):
<form action="" method="post" enctype="multipart/form-data">
{{ form.file }}
{{ form.non_field_errors }}
<input type="submit" value="Upload" />
</form>
Теперь давайте предположим, что я хочуотправить простой текстовый файл из моего приложения iPhone на сервер. Я действительно не знаю, как :
- указать имя файла
- указать
enctype
и - , чтобы убедиться, что этов формате, который Django может прочитать
Вот как далеко я продвинулся:
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];
Однако, Django не сделает этого, поскольку ожидаемая форма недопустима.Срвыше:
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid(): #this will not be true ...