2013-11-24 1 views
0

Я использую плагин jQuery Form для загрузки файлов. Эти файлы отправляются на мой скрипт cherrypy и обратно в мой jQuery, где имя файла добавляется к моей странице. Система работает нормально на локальном хосте. Я использую webfaction как веб-хост, и когда я пытаюсь загрузить файл с помощью плагина формы, я получаю следующую ошибку в журнале ошибок jQuery:jQuery Form Plugin ищет страницу в неправильном месте

2013/11/24 16:41:26 [error] 26628 # 0: * 2912993 open() "/ home/mywebsite/webapps/htdocs/submit" failed (2: Нет такого файла или каталога), клиент: 5.100.131.14, сервер: mywebsite.webfactional.com, запрос: "POST/отправьте HTTP/1.1 ", host:" mywebsite.webfactional.com ", referrer:" http://mywebsite.webfactional.com/freelinreg "

Странно, что он пытается открыть файл отправки на странице«/home/mywebsite/webapps/htdocs/submit », где он не exisit. Обычно то, что, по-видимому, делает вишня, основано на моем коде ниже, заключается в том, что make/submit 'доступно на «http://mywebsite.webfactional.com/freelinreg/submit» или «localhost: 8080/submit» при запуске моего компьютера.

Есть ли какой-нибудь момент, чтобы указать плагин jQuery Form для поиска '/ submit' на «http://mywebsite.webfactional.com/freelinreg/submit», а не на «/ home/mywebsite/webapps/htdocs/submit»?

класс Root (объект):

@cherrypy.expose 
def index(self) 
    return open('/home/joestox/webapps/freelinreg_static/index.html') 

@cherrypy.expose 
def submit(self, myfile): 

    cherrypy.session['myfile'] = myfile 
    data_name = myfile.filename 

    #Send back to JQuery with Ajax 
    #Put in JSON form 
    data_name= json.dumps(dict(title = data_name)) 
    cherrypy.response.headers['Content-Type'] = 'application/json' 

    return data_name 

HTML:

<!DOCTYPE html> 
    <html> 
     <head> 
      <script type='text/javascript' src='freelinreg_static/google.js'></script> 
      <script type='text/javascript' src='freelinreg_static/frontend.js'></script> 
      <script type='text/javascript' src='freelinreg_static/malsup.js'></script> 
     </head> 
     <body> 

     <form id="dataform" action="submit" method="post" enctype="multipart/form-data"> 
      <input type="file" name="myfile" id="myFile"/> 
      <input type="submit" id="data_submit" value="Continue"/> 
     </form>       

     </body> 
    </html> 

JQuery (frontend.js):

$(document).ready(function() { 
    (function() { 
     $('#dataform').ajaxForm({ 
      success: function (data) { 
       var $a_var = data['title']; 
       $('body').append($a_var); 
      } 
     }); 
     return false; 
    })(); 
}); 
+0

Кажется, что вы смешиваете локальные каналы и веб-маршруты. У вас есть правильные настройки окружения TMP/TEMP? Можете ли вы предоставить дамп ошибок Python (вы можете запустить его в консоли для этого)? – jwalker

ответ

0

jwalker правильно. Вы путаете путь URL и физические пути. Вашему файлу cherrypy требуется физическое местоположение в вашей системе для хранения файла. Я также не вижу, чтобы вы пытались сохранить загруженный файл в любом месте.

@cherrypy.expose 
def submit(self, myfile): 

    cherrypy.session['myfile'] = myfile 
    data_name = myfile.filename 
    upload_path = '/home/mywebsite/webapps/submit' + myfile.filename 

    size = 0 
    all_data = bytearray() 
    while True: 
     data = myfile.file.read(8192) 
     all_data += data 
     if not data: 
      break 
     size += len(data) 

    saved_file=open(upload_path, 'wb') 
    saved_file.write(all_data) 
    saved_file.close() 

    #Send back to JQuery with Ajax 
    #Put in JSON form 
    data_name= json.dumps(dict(title = data_name)) 

    return data_name 

Кроме того похоже, что вы хотите, чтобы пользователи могли просматривать файлы. Если это так, вам также понадобится включить статический просмотр для cherrypy (если у вас нет веб-сервера, обслуживающего статический контент).

cherrypy.config.update({'tools.staticdir.on': True, 
       'tools.staticdir.dir': '/home/mywebsite/webapps/submit' 
       }) 

Надеюсь, это поможет!