把URL转换成绝对URL

/************************************************************************
* 功能:    把URL转换成绝对URL
* 输入参数:strUrl     要转换的URL
            strWebUrl   当前网页的URL,它是绝对地址
* 输出参数:strUrl    转换过后的URL,若为空则转化失败
* 返回值:    无
************************************************************************/
void Common::ChangUrl(CString &strUrl, const CString &strWebUrl)
{
    if (strUrl.IsEmpty())
    {
        return;
    }

    strUrl.MakeLower();
    if (strUrl.Find(_T("http://")) == 0)
    {
        return;
    }

    if (strUrl == _T("#"))
    {
        strUrl = strWebUrl;
        return;
    }

    TCHAR TchTmp = strUrl[0];
    if (TchTmp == _T('/'))
    {//相对地址格式如:/a/b.html的,其绝对地址为:主域名+相对地址的路径

        //从参考URL中提取主域名
        int nIndex = strWebUrl.Find(_T("http://"));
        if (nIndex == -1)
        {
            strUrl.Empty();
            return;
        }

        nIndex += 8;
        nIndex = strWebUrl.Find(_T('/'), nIndex);
        CString strDiamon;
        if (nIndex == -1)
        {
            strDiamon = strWebUrl;
        }
        else
        {
            strDiamon = strWebUrl.Left(nIndex);
        }

        strUrl = strDiamon + strUrl;
        return;

    }
    else
    {//相对地址格式如:a/b.html,其绝对地址为:当前目录+相对地址路径

        CString strCurPath(strWebUrl);
        strCurPath.MakeLower();
        int nLength = strCurPath.GetLength();
        if (strCurPath[nLength - 1] == _T('/'))
        {
            strCurPath.Delete(nLength - 1);
        }

        //从参考URL中提取主域名
        int nIndex = strWebUrl.Find(_T("http://"));
        if (nIndex == -1)
        {
            strUrl.Empty();
            return;
        }

        nIndex += 8;
        nIndex = strWebUrl.Find(_T('/'), nIndex);
        CString strDiamon;
        if (nIndex == -1)
        {
            strDiamon = strWebUrl;
        }
        else
        {
            strDiamon = strWebUrl.Left(nIndex);
        }

        if (strDiamon == strCurPath)
        {
            if (strUrl.Left(3) == _T("../"))
            {
                strUrl.Empty();
            }
            else
            {
                strUrl = strCurPath + _T('/') + strUrl;
            }

            return;
        }

        nIndex = strCurPath.ReverseFind(_T('/'));
        if (nIndex == -1)
        {
            strUrl.Empty();
            return;
        }

        CString strFile(strCurPath.Mid(nIndex + 1));
        if (strFile.Find(_T('.')) != -1)
        {
            strCurPath = strCurPath.Left(nIndex);
        }

        //相对地址格式如:../a/b.html的
        int nStart = -1;
        do
        {
            nStart = strUrl.Find(_T("../"));
            if (nStart == 0)
            {
                strUrl.Delete(0, 3);
            }
            else
            {
                break;
            }

            nIndex = strCurPath.ReverseFind(_T('/'));
            if (nIndex != -1)
            {
                if (strDiamon == strCurPath && nStart == 0)
                {
                    strUrl.Empty();
                    return;
                }

                strCurPath = strCurPath.Left(nIndex);
            }
        } while (nStart == 0);

        strUrl = strCurPath + _T('/') + strUrl;
        return;
    }
}

### 将本地图片上传至服务器并生成可访问的URL #### 使用Python Django框架实现图片上传与URL生成 为了使本地图片能够被上传到服务器,并且可以作为网络资源通过URL访问,在Django项目中配置`MEDIA_URL`和`MEDIA_ROOT`是必要的操作[^3]。 ```python # settings.py 文件中的设置 import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') ``` 接着定义模型来处理文件或图像字段: ```python from django.db import models class Image(models.Model): title = models.CharField(max_length=255) image = models.ImageField(upload_to='images/') def __str__(self): return self.title ``` 为了让这些媒体文件能够在开发环境中正常工作,还需要调整项目的URL路由配置。这通常是在`urls.py`里完成的: ```python from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # ...其他URL模式... ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 当用户提交表单并将图片上传时,Django会自动保存该图片到指定位置,并创建相应的数据库记录。此时可以通过对象实例获取其绝对路径以及Web上可用的相对链接。 对于已成功上传的一张照片来说,假设它位于`/media/images/example.jpg`下,则完整的HTTP URL可能是类似于这样的形式:http://yourdomain.com/media/images/example.jpg 或者 http://localhost:8000/media/images/example.jpg(取决于实际部署环境)。此过程允许任何拥有有效URL的人都能查看这张特定的照片。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值