我试图捕获与表单一起发送的文件,并在对其进行保存之前对其执行一些操作。因此,我需要在temp目录中创建此文件的副本,但是我不知道如何到达它。Shutil的功能无法复制此文件,因为没有路径。那么,是否有其他方法可以执行此操作?
我的代码:
image = form.cleaned_data['image'] temp = os.path.join(settings.PROJECT_PATH, 'tmp') sourceFile = image.name # without .name here it wasn't working either import shutil shutil.copy(sourceFile, temp)
引起:
Exception Type: IOError at / Exception Value: (2, 'No such file or directory')
和调试:
# (..)\views.py in function 67. sourceFile = image.name 68. import shutil 69. shutil.copy2(sourceFile, temp) ... # (..)\Python26\lib\shutil.py in copy2 92. """Copy data and all stat info ("cp -p src dst"). 93. 94. The destination may be a directory. 95. 96. """ 97. if os.path.isdir(dst): 98. dst = os.path.join(dst, os.path.basename(src)) 99. copyfile(src, dst) ... 100. copystat(src, dst) 101. ▼ Local vars Variable Value dst u'(..)\\tmp\\myfile.JPG' src u'myfile.JPG' # (..)\Python26\lib\shutil.py in copyfile 45. """Copy data from src to dst""" 46. if _samefile(src, dst): 47. raise Error, "`%s` and `%s` are the same file" % (src, dst) 48. 49. fsrc = None 50. fdst = None 51. try: 52. fsrc = open(src, 'rb') ... 53. fdst = open(dst, 'wb') 54. copyfileobj(fsrc, fdst) 55. finally: 56. if fdst: 57. fdst.close() 58. if fsrc: ▼ Local vars Variable Value dst u'(..)\\tmp\\myfile.JPG' fdst None fsrc None src u'myfile.JPG'
这是类似的问题,可能会有所帮助。
import os from django.core.files.storage import default_storage from django.core.files.base import ContentFile from django.conf import settings data = request.FILES['image'] # or self.files['image'] in your form path = default_storage.save('tmp/somename.mp3', ContentFile(data.read())) tmp_file = os.path.join(settings.MEDIA_ROOT, path)