views.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #coding:utf-8
  2. from django.http import HttpResponse
  3. import settings as USettings
  4. import os
  5. import json
  6. from utils import GenerateRndFilename
  7. from django.views.decorators.csrf import csrf_exempt
  8. class MyException(Exception):
  9. def _get_message(self):
  10. return self._message
  11. def _set_message(self, message):
  12. self._message = message
  13. message = property(_get_message, _set_message)
  14. #保存上传的文件
  15. def SaveUploadFile(PostFile,FilePath):
  16. try:
  17. f = open(FilePath, 'wb')
  18. for chunk in PostFile.chunks():
  19. f.write(chunk)
  20. except MyException,E:
  21. f.close()
  22. return u"写入文件错误:"+ E.message
  23. f.close()
  24. return u"SUCCESS"
  25. #上传附件
  26. @csrf_exempt
  27. def UploadFile(request,uploadtype,uploadpath):
  28. if not request.method=="POST":
  29. return HttpResponse(json.dumps( u"{'state:'ERROR'}"),content_type="application/javascript")
  30. state="SUCCESS"
  31. file=request.FILES.get("upfile",None)
  32. #如果没有提交upfile则返回错误
  33. if file is None:return HttpResponse(json.dumps(u"{'state:'ERROR'}") ,content_type="application/javascript")
  34. #取得上传的文件的原始名称
  35. original_name,original_ext=os.path.splitext(file.name)
  36. original_ext=original_ext[1:]
  37. #类型检验
  38. if uploadtype=="image" or uploadtype=="scrawlbg":
  39. allow_type= USettings.UEditorSettings["images_upload"]['allow_type']
  40. else:
  41. allow_type= USettings.UEditorSettings["files_upload"]['allow_type']
  42. if not original_ext in allow_type:
  43. state=u"服务器不允许上传%s类型的文件。" % original_ext
  44. #大小检验
  45. max_size=USettings.UEditorSettings["images_upload"]['max_size']
  46. if max_size!=0:
  47. from utils import FileSize
  48. MF=FileSize(max_size)
  49. if file.size>MF.size:
  50. state=u"上传文件大小不允许超过%s。" % MF.FriendValue
  51. #检测保存路径是否存在,如果不存在则需要创建
  52. OutputPath=os.path.join(USettings.gSettings.MEDIA_ROOT,os.path.dirname(uploadpath)).replace("//","/")
  53. if not os.path.exists(OutputPath):
  54. os.makedirs(OutputPath)
  55. #要保存的文件名格式使用"原文件名_当前时间.扩展名"
  56. OutputFile=GenerateRndFilename(file.name)
  57. #所有检测完成后写入文件
  58. if state=="SUCCESS":
  59. #保存到文件中
  60. state=SaveUploadFile(file,os.path.join(OutputPath,OutputFile))
  61. #返回数据
  62. if uploadtype=="image" or uploadtype=="scrawlbg":
  63. rInfo={
  64. 'url' :OutputFile, #保存后的文件名称
  65. 'title' :request.POST.get("pictitle",file.name), #文件描述,对图片来说在前端会添加到title属性上
  66. 'original' :file.name, #原始文件名
  67. 'state' :state #上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
  68. }
  69. else:
  70. rInfo={
  71. 'url' :OutputFile, #保存后的文件名称
  72. 'original' :file.name, #原始文件名
  73. 'filetype' :original_ext,
  74. 'state' :state #上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
  75. }
  76. if uploadtype=="scrawlbg":#上传涂鸦背景
  77. return HttpResponse(u"<script>parent.ue_callback('%s','%s');</script>" % (rInfo["url"],rInfo["state"]))
  78. else:#上传文件与图片
  79. return HttpResponse(json.dumps(rInfo),content_type="application/javascript")
  80. #图片文件管理器
  81. def ImageManager(request,imagepath):
  82. if not request.method!="GET": return HttpResponse(json.dumps(u"{'state:'ERROR'}") ,content_type="application/javascript")
  83. #取得动作
  84. action=request.GET.get("action","get")
  85. if action=="get":
  86. TargetPath=os.path.join(USettings.gSettings.MEDIA_ROOT,os.path.dirname(imagepath)).replace("//","/")
  87. if not os.path.exists(TargetPath):
  88. os.makedirs(TargetPath)
  89. return HttpResponse(ReadDirImageFiles(TargetPath),content_type="application/javascript")
  90. #遍历所有文件清单
  91. def ReadDirImageFiles(path):
  92. files=""
  93. dirs=os.listdir(path)
  94. for f in dirs:
  95. ext=os.path.splitext(f)[1][1:]
  96. if ext!="":
  97. if ext in USettings.UEditorSettings["images_upload"]["allow_type"]:
  98. if files!="": files+="ue_separate_ue"
  99. files+=f
  100. return files
  101. #抓取远程图片
  102. @csrf_exempt
  103. def RemoteCatchImage(request,imagepath):
  104. upfile_url=request.POST.get("upfile",None)
  105. if upfile_url is None:
  106. return HttpResponse(json.dumps("{'state:'ERROR'}"),content_type="application/javascript")
  107. import urllib
  108. from urlparse import urlparse
  109. #读取远程图片文件
  110. try:
  111. CatchFile=urllib.urlopen(upfile_url)
  112. except MyException,E:
  113. tip=u"抓取图片错误:%s" % E.message
  114. return HttpResponse(json.dumps("{'tip:'%s'}" % tip),content_type="application/javascript")
  115. #取得目标抓取的文件名称
  116. OutFile=os.path.basename(urlparse(CatchFile.geturl()).path)
  117. #检查文件类型
  118. OutFileExt=os.path.splitext(OutFile)[1][1:]
  119. if not (OutFileExt!="" and OutFileExt in USettings.UEditorSettings['images_upload']['allow_type']):
  120. tip=u"不允许抓取%s类型的图片错误" % OutFileExt
  121. return HttpResponse(json.dumps(u"{'tip:'%s'}" % tip),content_type="application/javascript")
  122. #将抓取到的文件写入文件
  123. try:
  124. f = open(os.path.join(USettings.settings.MEDIA_ROOT,imagepath,OutFile).replace("\\","/"), 'wb')
  125. f.write(CatchFile.read())
  126. f.close()
  127. rInfo={
  128. 'url' : OutFile, # 新地址一ue_separate_ue新地址二ue_separate_ue新地址三',
  129. 'srcUrl':upfile_url, #原始地址一ue_separate_ue原始地址二ue_separate_ue原始地址三',
  130. 'tip' :u'远程图片抓取成功!' #'状态提示'
  131. }
  132. return HttpResponse(json.dumps(rInfo),content_type="application/javascript")
  133. except MyException,E:
  134. tip=u"写入图片文件错误:" % E.message
  135. return HttpResponse(json.dumps(u"{'tip:'%s'}" % tip),content_type="application/javascript")
  136. #搜索视频
  137. @csrf_exempt
  138. def SearchMovie(request):
  139. Searchkey =request.POST.get("searchKey",None)
  140. if Searchkey is None:
  141. return HttpResponse(u"错误!")
  142. Searchtype=request.POST.get("videoType","")
  143. import urllib
  144. Searchkey=urllib.quote(Searchkey.encode("utf8"))
  145. Searchtype=urllib.quote(Searchtype.encode("utf8"))
  146. try:
  147. htmlcontent=urllib.urlopen(u'http://api.tudou.com/v3/gw?method=item.search&appKey=myKey&format=json&kw=%s&pageNo=1&pageSize=20&channelId=%s&inDays=7&media=v&sort=s' % (Searchkey,Searchtype))
  148. return HttpResponse(htmlcontent)
  149. except MyException,E:
  150. return HttpResponse(E.message)
  151. #涂鸦功能上传
  152. @csrf_exempt
  153. def scrawlUp(request,uploadpath):
  154. action=request.GET.get("action","")
  155. #背景上传
  156. if action=="tmpImg":
  157. return UploadFile(request,"scrawlbg", uploadpath)
  158. else: #处理涂鸦合成相片上传
  159. try:
  160. content=request.POST.get("content","")
  161. import base64
  162. OutputFile=GenerateRndFilename("scrawl.png")
  163. OutputPath=os.path.join(USettings.gSettings.MEDIA_ROOT,os.path.dirname(uploadpath)).replace("//","/")
  164. if not os.path.exists(OutputPath):
  165. os.makedirs(OutputPath)
  166. f = open(os.path.join(OutputPath,OutputFile), 'wb')
  167. f.write(base64.decodestring(content))
  168. f.close()
  169. state="SUCCESS"
  170. except MyException,E:
  171. state="ERROR:"
  172. rInfo={
  173. "url":OutputFile,
  174. "state":state
  175. }
  176. return HttpResponse(json.dumps(rInfo),content_type="application/javascript")