上传图片的写法

<form id="uploadAvatarForm" action="{% url "upl:upload" %}" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" id="uploadAvatar" name="uploadavatarfile">
        <input type="submit" value="submit">
    </form>

form的写法

注意enctype的格式,上传文件需要添加{% csrf_token %}。

from functools import wraps

UPLOAD_AVATAR_TEXT = {
    ‘CHOOSE_IMAGE‘: ‘Choose Image‘,
    ‘CROP_IMAGE‘: ‘Crop‘,
    ‘TEST_FUNC_NOT_PASSED‘: ‘Forbidden‘,
    ‘INVALID_IMAGE‘: ‘Invalid File, Please choose an image‘,
    ‘NO_IMAGE‘: ‘Please upload image‘,
    ‘TOO_LARGE‘: ‘File Too Large, choose a smaller one‘,
    ‘SUCCESS‘: ‘Success‘,
    ‘ERROR‘: ‘Error, try later‘,
}

def test_func(request):
    return request.method == ‘POST‘ and request.user.is_authenticated()

def protected(func)://装饰符
    @wraps(func)
    def decorator(request, *args, **kwargs):
        if not test_func(request):
            return HttpResponse(
                "<script>window.parent.upload_avatar_error(‘%s‘)</script>" % UPLOAD_AVATAR_TEXT[‘TEST_FUNC_NOT_PASSED‘]
            )
        try:
            return func(request, *args, **kwargs)
        except UploadAvatarError as e:
            return HttpResponse(
                "<script>window.parent.upload_avatar_error(‘%s‘)</script>" % e
            )
    return decorator

UPLOAD_AVATAR_MAX_SIZE = 1024 * 1024 * 3

import os
import time
import hashlib

CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
PROJECT_PATH = os.path.dirname(CURRENT_PATH)
ROOT_PATH = os.path.dirname(PROJECT_PATH)

UPLOAD_AVATAR_UPLOAD_ROOT = os.path.join(PROJECT_PATH, ‘templates/upload‘)

@protected
def upload(request):
    try:
        uploaded_file = request.FILES[‘uploadavatarfile‘]
    except KeyError:
        raise UploadAvatarError(UPLOAD_AVATAR_TEXT[‘INVALID_IMAGE‘])
    if uploaded_file.size > UPLOAD_AVATAR_MAX_SIZE:
        raise UploadAvatarError(UPLOAD_AVATAR_TEXT[‘TOO_LARGE‘])
    name, ext = os.path.splitext(uploaded_file.name)
    new_name = hashlib.md5(‘%s%f‘ %(get_random_string(), time.time())).hexdigest()
    new_name = ‘%s%s‘ % (new_name, ext.lower())
    fpath = os.path.join(UPLOAD_AVATAR_UPLOAD_ROOT, new_name)
    with open(fpath, ‘w‘) as f:
        for c in uploaded_file.chunks(10240):
            f.write(c)
    try:
        Image.open(fpath)
    except IOError:
        try:
            os.unlink(fpath)
        except:
            pass
        raise UploadAvatarError(UPLOAD_AVATAR_TEXT[‘INVALID_IMAGE‘])

if UploadedImage.objects.filter(uid=get_uid(request)).exists():
        old_name = UploadedImage.objects.get(uid=get_uid(request)).image
        old_path = os.path.join(UPLOAD_AVATAR_UPLOAD_ROOT, old_name)
        os.unlink(old_path)//从文件夹删除旧图片
        UploadedImage.objects.filter(uid=get_uid(request)).update(image=new_name)
    else:
        UploadedImage.objects.create(uid=get_uid(request), image=new_name)
    return HttpResponse("success")

调用头像:

def welcome(request):
    s = UploadedImage.objects.get(uid=get_uid(request))
    imgs = "<p><img src=‘%s‘/></p>" % (UPLOAD_AVATAR_URL_PREFIX_ORIGINAL + s.image)
    return render_to_response(‘welcome.html‘, {‘image‘: imgs}, context_instance=RequestContext(request))

models.py写法

class UploadedImage(models.Model):
    uid = models.IntegerField(unique=True)
    image = models.CharField(max_length=255)
    upload_date = models.DateTimeField(auto_now_add=True)

def get_image_path(self):
        path = os.path.join(UPLOAD_AVATAR_UPLOAD_ROOT, self.image)
        if not os.path.exists(path):
            return None
        return path

特别注意

settings.py中STATIC_URL 决定访问路径,STATICFILES_DIRS设置访问路径包括的文件夹。

例如STATICFILES_DIRS = (
    ‘templates‘,
    os.path.join(os.path.dirname(__file__),  ‘..‘, ‘static‘),
)

STATIC_URL = ‘/te/‘

则UPLOAD_AVATAR_URL_PREFIX_ORIGINAL = ‘/te/upload/‘

可以没有te文件夹。只要根目录下有templates文件夹就可,然后下面有个二级子目录upload。

图片的html页面{% autoescape off %}
{{ image }}
{% endautoescape %}否则会显示转义符

上传图片的写法

时间: 2024-11-08 19:12:53

上传图片的写法的相关文章

django中上传图片的写法(转)

view参数 @csrf_exemptdef before_upload_avatar(request):    before = True    return render_to_response('accounts/before_upload_avatar.html',                              {'before': before},                              context_instance=RequestContext(re

MultipartFile上传图片的写法,记录一下。

上传图片的工具: 代码: 1 import org.springframework.stereotype.Component; 2 import org.springframework.web.multipart.MultipartFile; 3 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpSession; 6 import java.io.File; 7 import java.

上传图片后台写法

[HttpPost] public ActionResult UpFile() { int count = Request.Files.Count; for (int i = 0; i < count; i++) { WebTest.Entity.FileInfo fileInfo = new WebTest.Entity.FileInfo(); HttpPostedFileBase file = Request.Files[i]; string[] NameTpye = file.FileNa

与后台交互常见问题

1.图片的宽度固定.不然出现各种问题.当用户上传大的图片时易出现问题. 2.PC端需要兼容手机端的页面,如果<P>标签的字体大小不受设置的控制,在手机端往往会偏大很多,需要设置P标签的高度为百分比高度,外面的<div>容器的高度伸缩,所以也可以达到伸缩的效果. 3.在P标签中,该断行的时候就断行.不然出现文字跑到屏幕外面去了. ①断行代码,自动换行: word-wrap: break-word; //在长单词或 URL 地址内部进行换行. 另外一个值是:normal:只在允许的断字

html5 上传图片.net实现

jQuery插件之ajaxFileUpload 搞了一夜,还没弄出来随copy了一篇博客... 一.ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明: 1.url  上传处理程序地址. 2,fileElementId  需要上传的文件域的ID,即<input type="file">的ID.3,secureuri 是否启用安

通过android 客户端上传图片到服务器

昨天,(在我的上一篇博客中)写了通过浏览器上传图片到服务器(php),今天将这个功能付诸实践.(还完善了服务端的代码) 不试不知道,原来通过android 向服务端发送图片还真是挺麻烦的一件事. 上传代码: /* 上传文件至Server的方法 */ private void uploadFile() { String end = "\r\n"; String twoHyphens = "--"; String boundary = "*****"

kindeditor扩展粘贴图片功能&amp;修改图片上传路径并通过webapi上传图片到图片服务器

前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功能 kindeditor修改图片上传路径并通过webapi上传图片到图片服务器(支持分布式图片) 结果演示 1.扩展粘贴图片功能演示 2.修改图片上传路径演示: 我们的网站演示地址是:http://localhost:9393/ 我们的图片服务器地址是:http://localhost:9394/

用HTML5的File API做上传图片预览功能

用HTML5的File API做上传图片预览功能 前几天做了一个项目,涉及到上传本地图片的功能,正好之前了解过 html5 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习).移动端完全支持哦!已测试. 下面给大家看看代码吧怎么实现的 第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能) <input type="file" id="fileElem" mul

nginx+memcached+ftp上传图片+iis

nginx+memcached+ftp上传图片+iis 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模都比较小,都是一个服务器包含数据库,iis...然后就完事儿了.终于等到给窝窝团开发订餐系统时,以为可以了解更多服务器相关东西时,生产环境我又接触不了,但还是了解了好些内容:session怎么用数据库保存,图片如何用单独服务器之类,虽然都是小儿科,但是第一次接触这些时,还是感慨良多:觉得之前都白过了. 再到后来,终于,我们的一个客