>  기사  >  백엔드 개발  >  Python의 Django에서 Qiniu Cloud Storage에 파일 업로드

Python의 Django에서 Qiniu Cloud Storage에 파일 업로드

高洛峰
高洛峰원래의
2017-03-03 15:31:442562검색

최근 제가 작성하고 있는 작은 Django 프로젝트에서는 사용자가 사진을 업로드하는 기능을 구현해야 하는데, 이에 기록된 Qiniu Cloud Storage를 사용합니다. 여기서 사용하는 Qiniu Python SDK 버전은 7.0.3이며, 기능 사용법이 이전 버전과 약간 다를 수 있습니다.

원본 파일을 업로드하려면 먼저 자체 비즈니스 서버에 파일을 업로드한 다음 비즈니스 서버에서 클라우드 스토리지로 파일을 업로드해야 합니다. 이제 Qiniu의 양식 업로드는 비즈니스 서버를 통한 전송 없이 Qiniu에 파일을 직접 업로드할 수 있어 트래픽 비용을 절약하고 비즈니스 서버에 대한 부담을 줄여줍니다. 또한 설정을 통해 파일 업로드가 완료된 후 클라이언트가 업로드 성공 결과 페이지로 자동 리디렉션되도록 할 수도 있습니다. 여기서는 Qiniu의 양식 업로드를 사용하고 있습니다.

양식 업로드

사용자가 이미지를 업로드하기 위한 HTML 양식 코드는 다음과 같습니다. 키는 Qiniu에 저장된 이미지의 파일명을 지정하는 데 사용되며 토큰은 업로드 인증서로 적법성을 확인하고 반환 정보를 설정하는 데 사용됩니다.

upload.html

<form method="POST" action="http://upload.qiniu.com/" enctype="multipart/form-data">
<input name="key" type="hidden" value="">
<input name="token" type="hidden" value="">
<input name="file" type="file">
<input type="submit">
</form>

위 HTML 페이지로 점프하는 뷰 함수의 핵심 코드는 다음과 같습니다. upload_token 함수는 양식에 토큰 필드를 생성하는 데 사용됩니다. upload_token 함수의 7200은 업로드된 바우처의 유효 기간을 나타냅니다. returnUrl은 업로드가 성공한 후의 리디렉션 주소를 나타냅니다. returnBody는 리디렉션 중에 Qiniu가 반환한 정보를 나타냅니다. base64로 인코딩되어 있습니다. json 데이터를 얻으려면 json 데이터를 디코딩해야 합니다. 업로드 오류가 발생하면 오류 메시지가 URL에 일반 텍스트로 직접 표시되며 반환된 json 데이터에는 포함되지 않습니다. mimeLimit를 설정하여 업로드되는 파일 유형을 제한할 수도 있습니다.

views.py

import qiniu
import uuid
ACCESS_KEY = &#39;七牛分配的公钥&#39;
SECRET_KEY = &#39;七牛分配的私钥&#39;
BUCKET_NAME = &#39;保存文件的仓库名&#39;
key = str(uuid.uuid1()).replace(&#39;-&#39;, &#39;&#39;) # 这里使用uuid作为保存在七牛里文件的名字。并去掉了uuid中的“-”
q = qiniu.Auth(ACCESS_KEY, SECRET_KEY)
token = q.upload_token(BUCKET_NAME, key, 7200, {&#39;returnUrl&#39;:&#39;http://127.0.0.1:8000/photos/uploadprocessor&#39;, &#39;returnBody&#39;: &#39;{"name": $(fname), "key": $(key)}&#39;, &#39;mimeLimit&#39;:&#39;image/jpeg;image/png&#39;})
return render_to_response(&#39;photos/upload.html&#39;, {&#39;token&#39;: token, &#39;key&#39;: key}, context_instance=RequestContext(request))

Python의 Django에서 Qiniu Cloud Storage에 파일을 업로드하는 것과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.