Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何询问数据库是否存在Google App Engine中的.js文件_Javascript_Python_Html_Google App Engine_Gql - Fatal编程技术网

Javascript 如何询问数据库是否存在Google App Engine中的.js文件

Javascript 如何询问数据库是否存在Google App Engine中的.js文件,javascript,python,html,google-app-engine,gql,Javascript,Python,Html,Google App Engine,Gql,我想做的是有一个上传按钮来上传文件到我们的存储系统。我正在用Python使用Google应用程序引擎。还包括用于视图的HTML和Javascript 为此,我们有一个HTML和一个.js,询问用户是否确定要覆盖一个文件。对于这个覆盖问题,我需要让数据库知道它是否存在,因此是否应该问这个问题 问题是我甚至不知道从哪里开始。我向用户显示了这个confirm()文本和一个GQL数据库,但我不知道如何提问。例如,我通过URL上传,但是我没有对此的响应,而且我不想通过URL将问题(文件名…)传递到数据库

我想做的是有一个上传按钮来上传文件到我们的存储系统。我正在用Python使用Google应用程序引擎。还包括用于视图的HTML和Javascript

为此,我们有一个HTML和一个.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返回。 我们不知道是否没有上传文件,如果是,如何上传。这是因为我们有两件事不知道如何组合起来:

  • HTML表单的普通“输入类型=文件,方法=发布,提交输入类型=提交”按钮

  • 我们通过RequestHandler连接到google应用程序引擎等

你有什么想法吗?

这里有一个可能性:


实现一个servlet,该servlet可以回答给定文件名的问题;它可以返回“0”或“1”(或您选择的任何内容)作为其HTTP响应,具体取决于文件是否存在。然后从javascript向该servlet发送XmlHttpRequest POST,并将文件名作为POST参数。根据XmlHttpRequest的返回,向请求确认的用户显示UI。

是否使用blobstore在GAE上存储文件

如果是,则每个blobstore实体都有一个属性文件名。在将表单提交给blobstore处理程序之前,请使用BlobInfo.gql(query_string,*args,**kwds)查询该文件名:

对于“servlet”,您只需编写请求处理程序,该处理程序将输出0或1以响应提交的文件名


此外,如果每个用户/组织只需要一个具有该文件名的文件,您可能需要存储一个单独的上载文件列表和相应的用户/组织,并进行查询。

这看起来像我想要的。但是如何在Python版本的Google App Engine中实现servlet?在Python中,您实现了RequestHa请看这里:对于处理此路径的servlet,除了(或代替)“get”之外,您可能还想实现“post”。您是否使用了任何Python框架(例如django、web2py…)。你也可以在那里找到一些可以帮助你的工具。不,JMax,我们只是使用普通的google app engine&python和html和javascript,因为这是一个很短的项目,我们在开始之前不知道Django的神奇之处:你是如何存储和组织文件的?文件名不需要是唯一的约束,这取决于你如何存储它们;问题的答案完全取决于你如何存储和组织。嗨,尼克!我们只是通过Dropbox API将它们放入Dropbox。为此,我们有调用Dropbox函数的python代码。这是可行的。问题是我们不知道如何将应该上传文件的Javascript连接到请求我的意思是,我们认为我们正在连接RequestHandler,但我们不知道如何传递文件。我们使用的是这个例子,“post”一个。
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);
        }       

}
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()