2017-08-01 18 views
0

私はLibreOfficeでunoconvを使って、docとdocxファイルをサーバーのpdfに変換しています。変換したファイルをS3にアップロードする必要があります。Django Python OSErrorそのようなファイルやディレクトリはありませんが、ファイルはありません

私は成功したファイルを変換することができ、私はそれらをサーバで見ることができます。

しかし、私がpdfをアップロードしようとすると、エラーが発生します。私は何が欠けていますか?これはうまく動作します

事前に

ありがとう:ここk_out.set_contents_from_filename(s3file)

def s3upload(s3file): 

    # Conecta na AWS S3 
    conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) 
    bucket_out = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME) 
    k_out = Key(bucket=bucket_out, name=s3file) 

    # Define a path para salvar o documento na S3 
    resume_path = 'resumes/%s/' % str(date.today()) 

    # key é o nome do arquivo na S3 
    key = '%s%s' % (resume_path, s3file) 
    k_out.key = key 

    # Salva na AWS S3 
    k_out.set_contents_from_filename(s3file) 
    k_out.make_public() 

    # deleta o arquivo localmente 
    subprocess.call("rm -f %s" % s3file, shell=True) 

トレースバックされています:これは私がラインでのエラーを取得するコードがある

import subprocess 
from boto.s3.connection import S3Connection, Bucket, Key 

def doc_to_pdf(user): 
    ''' 
    Convert doc or docx to PDF. 

    parameter user: is a request.user 

    Usage: 
     doc_to_pdf(self.request.user): 
    ''' 

    user_cv = CandidateCV.objects.get(user=user) 
    user_cv_file = str(user_cv.resume).split('/')[-1] # tem que ser PDF 
    user_cv_filetype = user_cv_file.split('.')[-1] 

    if not user_cv_filetype in settings.PDF_FILE_TYPE: 
     # Se não for PDF 
     file_in = user_cv.resume.url 
     file_name = file_in.split('/')[-1] 
     # download 
     urllib.request.urlretrieve(file_in, file_name) 
     file_out = user_cv_file.split('.')[0] + '.pdf' 

     # converte para PDF 
     env = os.environ.copy() 
     env['HOME'] = '/tmp' 
     subprocess.Popen(["unoconv","-f", "pdf", "%s" % (file_in)], env = env) 

     # Define a path para salvar o documento na S3 
     resume_path = 'resumes/%s/' % str(date.today()) 

     # key é o nome do arquivo na S3 
     key = '%s%s' % (resume_path, file_out) 

     # deleta o arquivo localmente 
     subprocess.call("rm -f %s" % user_cv_file, shell=True) 

     # Salva o novo formato no banco 
     user_cv.resume = key 
     user_cv.save() 

IOError at /pt-br/dashboard/jobcombo/25-mnj70998-809898m-nh8/candidate-base/ 
[Errno 2] No such file or directory: '/opt/python/bundle/42/app/da15ad64-ef23-47ff-b6f0-f2f8e0cdc2c2.pdf' 

Traceback: 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    71.    return self.dispatch(request, *args, **kwargs) 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
    34.    return bound_func(*args, **kwargs) 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
    30.     return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/opt/python/current/app/combo/views.py" in dispatch 
    3190.   return super(CandidateBase, self).dispatch(*args, **kwargs) 
File "/opt/python/run/venv/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    89.   return handler(request, *args, **kwargs) 
File "/opt/python/current/app/combo/views.py" in post 
    3560.      s3upload(user_cv_file) 
File "/opt/python/current/app/combo/aws_upload.py" in s3upload 
    107.  k_out.set_contents_from_filename(file_to_upload) 
File "/opt/python/run/venv/lib/python2.7/site-packages/boto/s3/key.py" in set_contents_from_filename 
    1370.   with open(filename, 'rb') as fp: 
+0

エラーのトレースバックを表示すると便利です。 – Bobort

+0

どうすればいいですか?ログファイル? –

+0

コマンドラインでPythonが吐き出すものをコピー&ペーストするだけです。 'Traceback(最も最近の呼び出し最後):'で始める必要があります。コマンドプロンプトがない場合、ログファイルは同じテキストでなければなりません。 – Bobort

答えて

1

ファイル変換を実行するには、unoconvの実行に2秒かかります。 だからファイル変換のために、私は設定する必要がありました:

p = subprocess.Popen('blah') 
p.wait() 

を、1週間後、私はこの作業を得ました。

ありがとうございました

関連する問題