申し訳ありません、初心者の質問:Djangoアプリケーションで、Webブラウザからサーバーにファイルをアップロードできる非常に簡単な機能があります(完璧に動作します)。さて、Webブラウザではなく、iPhoneを使いたいと思います。iPhoneからDjangoにファイルをアップロード
Djangoに有効なフォームを提供する方法がわからないので、私はちょっと立ち往生しました。つまり、わかっている限り、ファイル名とenctype = "multipart/form-data"が必要です。ここで
はジャンゴでの私のアップロード機能である:
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>
さて、私は、単純なtxtファイルを送信したいとしましょう私のiPhoneアプリからサーバーに。 私は本当にどのように知らない:enctype
と
これはを読むことができる形式でだことを確認してください指定
- どのくらい私が得たか:
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。上:HTMLフォームから
ありがとうございますが、それでも動作しません。今私は例外: "マルチパートで無効な境界:なし"を取得する境界とは何ですか、どのように設定する必要がありますか?ご協力いただきありがとうございます! –
NSString * boundary = [NSString stringWithString:@ "のようなもの---------------------------境界線-------- ------------------- "]; NSString * contentType = [NSString stringWithFormat:@ "マルチパート/フォームデータ;境界=%@"、境界]; [addValue:contentType forHTTPHeaderField:@ "Content-Type"]を要求します。 –
もしそうなら、今私は境界線が何であるか考えました。ランダムですか? –