o
    Ä.Æiç  ã                   @   sî   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 eƒ Z
dZdZdZg d¢Ze j e j e j e j e¡¡¡¡Zdd
edefdd„Zdd„ Zdefdd„Zd dededededef
dd„Ze
 d¡e
 d¡defdd„ƒƒZdS )!é    N)Ú	APIRouterÚRequest©ÚJSONResponse)ÚImageé
   i    i   )zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetzapplication/vnd.ms-excelztext/csvzapplication/csvé  ÚmessageÚstatus_codec                 C   s   t d| dœ|dS )NT)Úerrorr	   ©Úcontentr
   r   )r	   r
   © r   ú:C:\quy\Job\pod\controller\admin\admin_upload_controller.pyÚresponse_error   ó   r   c                 C   s   t d| dœddS )NF)r   ÚdataéÈ   r   r   )r   r   r   r   Úresponse_success   r   r   Ú	file_pathc                 C   s>  zt  | ¡}W n ty   |  Y S w |j\}}d}t|| || dƒ}t|| ƒt|| ƒ}}|dk r?| ||ft jj¡}|j	dv sN|j	dkrod|j
v rot  d|jd¡}|j	dkrg|j|| ¡ d	 d
 n| |¡ |}n
|j	dkry| d¡}tj | ¡\}	}
|	› d}|j|ddd || krtj | ¡rt | ¡ |S )NiÐ  é   )ÚRGBAZLAÚPZtransparencyÚRGB)éÿ   r   r   r   é   )Úmaskz.jpgZJPEGéP   )Zquality)r   ÚopenÚIOErrorÚsizeÚminÚintÚresizeZ
ResamplingZLANCZOSÚmodeÚinfoÚnewZpasteÚsplitÚconvertÚosÚpathÚsplitextÚsaveÚexistsÚremove)r   ÚimgÚwÚhZmax_dimÚratioÚnwZnhÚbgÚ	base_nameÚ_Zjpg_pathr   r   r   Úconvert_to_jpg_and_compress"   s2   ÿ






r7   FÚfilenamer   Úbase_dirÚsub_dirÚis_imgc                 C   sÐ   t j | ¡\}}t dd| ¡ ¡pd}t ¡ jd d… }| 	d¡p"d}|› d|› d|› }	t j 
||	¡}
t|
dƒ}| |¡ W d   ƒ n1 sIw   Y  |r[t|
ƒ}t j |¡}n|	}|d|› d	|› d
œS )Nz[^a-z0-9\-]+ú-Úfileé   Ú.ÚtmpÚwbz	/uploads/ú/)r8   r*   )r)   r*   r+   ÚreÚsubÚlowerÚuuidÚuuid4ÚhexÚstripÚjoinr   Úwriter7   Úbasename)r8   r   r9   r:   r;   Úoriginal_nameÚextZ	safe_nameZrand_strZnew_filenamer*   ÚfZ
final_pathZ
final_namer   r   r   Ústore_uploaded_file_contentH   s    ÿþrP   z/uploadÚrequestc                 ƒ   s`  | j dkrtdddS | j dd¡}d}d}d}d }d|v r?|  ¡ I d H }| dd¡ ¡ }| d	d¡ ¡ }| d
d¡ ¡ }n=|  ¡ I d H }| d¡}| d	¡}| d
¡}	t|t	ƒr`t	|ƒ ¡ nd}t|t	ƒrmt	|ƒ ¡ nd}t|	t	ƒrzt	|	ƒ ¡ nd}|dkrÔ|dvrˆt
dƒS |sŽt
dƒS d|v sšd|v sšd|v ržt
dƒS |dkr¤dnd}
tj td|
|¡}tj |¡s¹t
dƒS zt |¡ td|dœƒW S  tyÓ   t
dƒ Y S w |dvrÜt
dƒS |sât
dƒS |dk}|rêdnd}
tj td|
¡}tj|ddd |rm| d¡}|rt|d  d!dƒst
d"ƒS t|ƒtkrt
d#ƒS g }|D ]6}t|d$dƒ d%¡s5t
d&ƒ  S | ¡ I d H }t|ƒtkrIt
d'ƒ  S t|j|||
dd(}| |¡ q#t	| jƒ d¡‰ t‡ fd)d*„|D ƒƒS | d+¡}|r|t|d!dƒs€t
d,ƒS | ¡ I d H }t|ƒt kr’t
d-ƒS t|d$dƒt!vrŸt
d.ƒS t|j|||
d/d(}t|d0 gƒS )1NÚOPTIONSÚOKéÌ   r   zcontent-typeÚ zapplication/jsonÚactionÚtypeÚfileNameZ
deletefile)r/   Z
file_excelu   type khÃ´ng há»£p lá»‡.u   Thiáº¿u fileName.z..rB   ú\u   TÃªn file khÃ´ng há»£p lá»‡.r/   Z
upload_imgZupload_file_excelÚuploadsu   File khÃ´ng tá»“n táº¡i.T)Zdeletedr=   u   KhÃ´ng thá»ƒ xoÃ¡ file.u   Thiáº¿u hoáº·c sai type.u,   KhÃ´ng cÃ³ dá»¯ liá»‡u form data gá»­i lÃªn.iý  )r$   Úexist_okÚfilesr   r8   u   Thiáº¿u files.u&   Sá»‘ lÆ°á»£ng áº£nh khÃ´ng há»£p lá»‡.Úcontent_typezimage/u   File khÃ´ng pháº£i áº£nh.u   áº¢nh vÆ°á»£t quÃ¡ 2MB.)r;   c                    s   g | ]
}ˆ › |d  › ‘qS )r*   r   )Ú.0Ús©Úbase_urlr   r   Ú
<listcomp>Ã   s    z"handle_request.<locals>.<listcomp>r=   u   Thiáº¿u hoáº·c lá»—i file.u   File vÆ°á»£t quÃ¡ 1MB.u   Chá»‰ cho phÃ©p xlsx, xls, csv.Fr*   )"Úmethodr   ÚheadersÚgetÚjsonrE   rI   ÚformÚ
isinstanceÚstrr   r)   r*   rJ   ÚBASE_DIRÚisfiler.   r   Ú	ExceptionÚmakedirsÚgetlistÚgetattrÚlenÚMAX_IMG_FILESÚ
startswithÚreadÚMAX_IMG_SIZErP   r8   Úappendra   ÚrstripÚMAX_FILE_SIZEÚALLOWED_FILE_MIMES)rQ   r]   rV   Zreq_typeÚ	file_nameZ	form_datar   Z
action_valZtype_valZfileName_valr:   r   r;   Zupload_base_dirr\   ZsavedÚfile_objr   Z
saved_infor   r`   r   Úhandle_requestc   s–   €





þÿ

r{   )r   )F)r)   rC   rF   Úfastapir   r   Úfastapi.responsesr   ZPILr   Úrouterrq   rt   rw   rx   r*   ÚdirnameÚabspathÚ__file__rj   ri   r"   r   r   r7   ÚbytesÚboolrP   ÚpostÚoptionsr{   r   r   r   r   Ú<module>   s&    $	 &