2016-09-20 3 views
2

ファイルマネージャー

ファイルをアップロードしたいのですが、ファイルを取得して拡張子なしで保存するファイルマネージャサービスがあります。ファイル名はUUIDで、ファイル情報を返します。どのようにそのファイルを見つけるのはイメージか文書か...拡張子とコンテンツタイプなし?

私のファイルマネージャハンドラ:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import json 
from pyramid_storage.exceptions import FileNotAllowed 
import uuid 
from pyramid.view import view_config 
from pyramid.response import Response 
import os 


class UploadHandler: 
    def __init__(self, request): 
     self.request = request 
     self.settings = self.request.registry.settings 

    @view_config(route_name='upload', request_method='POST', renderer='json') 
    def post(self): 
     # file 
     f = self.request.POST.items() 

     # file name 
     file_name_main = f[0][1].filename 

     # content type 
     content_type = str(f[0][1].type) 

     if content_type: 
      extension_main = content_type.split('.')[-1] 

      # set id for file name 
      if extension_main: 
       f[0][1].filename = str(uuid.uuid4()) 
      else: 
       response = Response(body=json.dumps({'ERROR': 'Your File Not Allowed'})) 
       response.headers.update({ 
        'Access-Control-Allow-Origin': self.settings['Access-Control-Allow-Origin'], 
       }) 
       return response 
     else: 
      response = Response(body=json.dumps({'ERROR': 'Your File Not Allowed'})) 
      response.headers.update({ 
       'Access-Control-Allow-Origin': self.settings['Access-Control-Allow-Origin'], 
      }) 
      return response 

     try: 
      # save file 
      file_name = str(self.request.storage.save(f[0][1])) 
     except FileNotAllowed:   
      response = Response(body=json.dumps({'ERROR': 'Your File Not Allowed'})) 
      response.headers.update({ 
       'Access-Control-Allow-Origin': self.settings['Access-Control-Allow-Origin'], 
      }) 
      return response 

     # file name == file id 
     f_name = file_name 
     file_path = self.request.storage.base_path + os.sep + f_name 
     file_size = os.path.getsize(file_path) 

     response = Response(body=json.dumps(
      {'file_id': f_name, 'file_name': file_name_main, 'content_type': content_type, 'size': file_size, 
      'extension': extension_main})) 

     response.headers.update({ 
      'Access-Control-Allow-Origin': self.settings['Access-Control-Allow-Origin'], 
     }) 
     return response 
+0

**例:**私は画像を検出するために、枕のライブラリを使用することができ、画像のための : 'PILインポートImage'から 'てみてください: ' を' Image.open( "m.jpg")となどim: ' ' pass''例外を除いて、e:' 'print(" ERROR:FileNotAllowed "+ str(e))' – J4v4d

答えて

1

知られているファイルの種類を認識するために「魔法」を使用していますfileと呼ばれるUNIXユーティリティがあります。 fileは、この目的でlibmagicというライブラリを使用します。

libmagicへのpythonインターフェイスはfilemagicと呼ばれ、hereを得ることができます。

関連する問題