私がやっていることは、ファイルを私たちのストレージシステムにアップロードするためのアップロードボタンがあることです。私はPythonでGoogle App Engineを使用しています。ビューのHTMLとJavascript。そのためにGoogle App Engineの.jsファイルが存在するかどうかDBに問い合わせる方法
、我々はHTMLを持っている、と彼はファイルを上書きしたいことを確認します場合は、ユーザーに尋ねるa.js。その上書き質問については、私はそれが存在するかどうかを知るために、データベースを依頼する必要があり、そして質問が尋ねするかどうそう...
事は私もどこから始めれば分からないです。私は、このconfirm()テキストをユーザに表示し、GQLデータベースを持っていますが、質問をする方法はわかりません。例えば、私はURLを使ってアップロードしますが、私はそのためのレスポンスを持っていませんし、URLを介してデータベースに質問(ファイルの名前など)を渡したくありません...
私はどのような経路を追うべきですか?私は何かを不可能にしようとしているのか、全く意味がないのか?
ありがとうございます!
私はいくつかのコードを追加します。
これは我々がファイルをアップロードするユーザーを尋ねるHTMLフォームです:
<form id="up_file" enctype="multipart/form-data" method="post">
<input type="hidden" name="user_id" value="{{ current_user.id }}"/>
<input type="hidden" name="group_id" value="{{ group.id }}"/>
<p>File: <input type="file" name="filename" id="file_name"/></p>
<p><input type="button" value="Upload" onClick="seguro_sobreescribir(filename,{{ current_user.id }},{{ group.id }})"/></p>
</form>
、これは現在では我々のアプリケーションに情報を送信しようとしたJavaScriptです
function Request(function_name, opt_argv) {
if (!opt_argv)
opt_argv = new Array();
// Find if the last arg is a callback function; save it
var callback = null;
var len = opt_argv.length;
if (len > 0 && typeof opt_argv[len-1] == 'function') {
callback = opt_argv[len-1];
opt_argv.length--;
}
var async = (callback != null);
// Build an Array of parameters, w/ function_name being the first parameter
var params = new Array(function_name);
for (var i = 0; i < opt_argv.length; i++) {
params.push(opt_argv[i]);
}
var body = JSON.stringify(params);
// Create an XMLHttpRequest 'POST' request w/ an optional callback handler
var req = new XMLHttpRequest();
req.open('POST', 'https://safeshareapp.appspot.com/upload', async);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", body.length);
req.setRequestHeader("Connection", "close");
if (async) {
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
var response = null;
try {
response = JSON.parse(req.responseText);
} catch (e) {
response = req.responseText;
}
callback(response);
}
}
}
// Make the actual request
req.send(body);
}
// Comprobar si existe, y si existe, preguntar si se quiere sobreescribir
function seguro_sobreescribir(filename,user_id,group_id)
{
var resp=confirm("Seguro que quiere sobreescribir el archivo "+filename.value+" del usuario "+user_id+" del grupo "+group_id+"?");
if(resp)
{
var result = Request('Upload',[filename,user_id,group_id]);
alert("Hemos hecho request "+ result);
}
}
そして、これが私たちの要求を処理するのRequestHandlerである:誰かがアップロードボタンをクリックすると、Googleのエンジン
class RPCHandler(webapp.RequestHandler):
""" Allows the functions defined in the RPCMethods class to be RPCed."""
def __init__(self):
webapp.RequestHandler.__init__(self)
self.methods = RPCMethods()
def post(self):
args = simplejson.loads(self.request.body)
func, args = args[0], args[1:]
if func[0] == '_':
self.error(403) # access denied
return
func = getattr(self.methods, func, None)
if not func:
self.error(404) # file not found
return
result = func(*args)
self.response.out.write(simplejson.dumps(result))
class RPCMethods:
def Upload(self, *args):
status = -1
fileitem = args[0]
userid = args[1]
groupid=args[2]
return status
def main():
app = webapp.WSGIApplication([('/upload', RPCHandler)], debug=True)
util.run_wsgi_app(app)
if __name__ == '__main__':
main()
実際、戻りステータスはJavaScriptで未定義の状態になっています。 ファイルをアップロードしていないかどうかわかりません。私たちは一緒に置く方法がわからない2つのことがあるのでそれがあります:
通常の「入力タイプ=ファイル、方法=ポスト、および入力タイプを提出= HTMLフォームの送信ボタンを
?
GoogleのアプリエンジンへのRequestHandlerを経由して私たちの接続など
あなたが任意のアイデア
Pythonフレームワーク(例:django、web2py ...)を使用していますか?また、そこに手伝ってくれるツールもあります。 – JMax
いいえ、JMax、私たちはちょうど短いプロジェクトで、開始前にDjangoの驚異を知らなかったので、通常のGoogleアプリケーションエンジンとPythonをhtmlとjavascriptで使用しています:D – c4sh
どのようにファイルを格納し整理していますか?ファイル名の保存方法に応じて、ファイル名を一意の制約にする必要はありません。あなたの質問に対する答えは、物事をどのように保管し整理しているかによってまったく異なります。 –