申し訳ありませんが、初心者の質問です。Djangoアプリケーションには、Webブラウザーからサーバーにファイルをアップロードできる非常に単純な関数があります(完全に機能します)。さて、Webブラウザの代わりに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アプリからサーバーに簡単なtxtファイルを送信するとします。 私は本当に方法がわかりません:
- ファイル名を入力してください
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は、期待する形式が無効であるため、これを除外しません。Cf. その上:
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid(): #this will not be true ...