欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django+Vue實(shí)現(xiàn)文件上傳下載的項(xiàng)目實(shí)踐

 更新時(shí)間:2023年06月07日 11:27:26   作者:穿越寒冬  
本文主要介紹了Django+Vue實(shí)現(xiàn)文件上傳下載的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

首先我要實(shí)現(xiàn)的頁(yè)面效果是這樣的

 當(dāng)點(diǎn)擊上傳文件按鈕,彈出上傳文件的彈出框,可以上傳多個(gè)文件,點(diǎn)擊確定后才正式開(kāi)始上傳

 點(diǎn)擊右側(cè)下載按鈕,可以直接下載文件。

上傳功能

后端代碼

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, '../upload')
MEDIA_URL = '/upload/'

這段代碼表示你上傳的文件都會(huì)放在你項(xiàng)目根目錄的upload文件夾下。

views.py

@api_view(('POST',))
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def upload_list(request):
    # 如果項(xiàng)目根目錄沒(méi)有upload文件夾,會(huì)自動(dòng)給你創(chuàng)建一個(gè)
    folder_path = settings.MEDIA_ROOT
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    files = request.FILES.getlist('file')
    for file in files:
        # 這三行代碼就是上傳文件的代碼
        f = open(settings.MEDIA_ROOT + "/" + file.name, mode='wb')
        for chunk in file.chunks():
            f.write(chunk)
        # 這段代碼是我要網(wǎng)數(shù)據(jù)庫(kù)里存的一些文件信息,如果不存庫(kù)的話不用寫(xiě)
        size = file.size
        suffix = file.content_type
        createUser = request.user
        filePath = settings.MEDIA_URL + file.name
        name = file.name
        # 上傳完文件記得要關(guān)閉
        # 需要注意的一點(diǎn),如果f.close()這句代碼之前,上傳文件之后有報(bào)錯(cuò),那你文件是一直被占用的狀態(tài),刪除也刪不掉,所以一定要做好代碼順序
        f.close()
        # 往數(shù)據(jù)庫(kù)里存文件信息
        Filemanage.objects.create(size=size, suffix=suffix, create_user=createUser, file_path=filePath, name=name)
    return JsonResponse(OrderedDict([
        ('results', {})
    ], code=status.HTTP_200_OK))

前端代碼

<el-upload
          class="upload-demo"
          ref="upload"
          action=""
          :auto-upload="false"
          :http-request="upload"
          :before-upload="beforeAvatarUpload"
          multiple
        >
          <el-button size="small" type="primary">點(diǎn)擊上傳</el-button>
        </el-upload>

:ref="upload":必須要寫(xiě),因?yàn)槲覀兪鞘謩?dòng)上傳方式。

:auto-upload="false":這里我設(shè)置的不自動(dòng)上傳,如果你沒(méi)有確定按鈕,點(diǎn)擊一起上傳的需求,那你就把值變?yōu)閠ure,你選完文件后會(huì)自動(dòng)上傳。

:http-request="upload":覆蓋默認(rèn)的上傳行為,可以自定義上傳的實(shí)現(xiàn)。

:before-upload="beforeAvatarUpload":上傳文件之前的鉤子,一般用于限制上傳文件大小和類型。

multiple:多文件上傳。

methods: {
    beforeAvatarUpload(file) {
        const isLt2M = file.size / 1024 / 1024 < 200;
        if (!isLt2M) {
            this.$message.error('上傳頭像圖片大小不能超過(guò)2MB!');
        }
        return isLt2M;
    },
    upload(param) {
        const formData = new FormData()
        formData.append('file', param.file)
        mail.uploadFile(formData).then(response => {
            console.log('上傳圖片成功')
            this.$refs.upload.clearFiles()
        }).catch(response => {
            console.log(response)
            this.$refs.upload.clearFiles()
        });
    },
}

下載功能

后端代碼

def download(request, nid):
    # 通過(guò)前臺(tái)傳來(lái)的id查出文件名
    row_object = Filemanage.objects.filter(id=nid).first()
    # 文件的相對(duì)路徑
    file_path = '/upload/' + row_object.name
    # 打開(kāi)文件
    with open(settings.MEDIA_ROOT + "/" + row_object.name, 'rb') as f:
        response = HttpResponse(f.read())
    # 設(shè)置Content-Disposition頭以強(qiáng)制瀏覽器下載文件
    file_name = os.path.basename(file_path)
    response["Content-Type"] = "application/octet-stream"
    response['Content-Disposition'] = f'attachment; filename="{file_name}"'
    return response

前端代碼

<el-button
  v-if="permissionList.del"
  size="small"
  type="success "
  @click="download(row)"
>{{ "下載" }}</el-button>
methods: {
    download(row) {
	    this.loading = true;
        // 這塊是我封裝的axios請(qǐng)求,請(qǐng)求時(shí)要帶著responseType: 'blob',我會(huì)在下面放上我的代碼
	    file.requestDownload(row.id).then((response) => {
	      const url = window.URL.createObjectURL(new Blob([response.data]));
	      const link = document.createElement('a');
	      link.href = url;
	      link.setAttribute('download', row.name);
	      document.body.appendChild(link);
	      link.click();
	    })
	    .catch((e) => {
	      console.log(e)
	    });
    },
}
requestDownload(id) {
    return request({
      url: '/tool/download/' + id + '/',
      method: 'get',
      responseType: 'blob'
    })
}

 到此這篇關(guān)于Django+Vue實(shí)現(xiàn)文件上傳下載的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)Django Vue文件上傳下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù)

    Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù)

    這篇文章主要介紹了Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • python利用itertools生成密碼字典并多線程撞庫(kù)破解rar密碼

    python利用itertools生成密碼字典并多線程撞庫(kù)破解rar密碼

    這篇文章主要介紹了python利用itertools生成密碼字典并多線程撞庫(kù)破解rar密碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python pandas 重命名索引和列名稱的實(shí)現(xiàn)

    Python pandas 重命名索引和列名稱的實(shí)現(xiàn)

    本文主要介紹了Python pandas 重命名索引和列名稱的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python tkinter實(shí)現(xiàn)圖片標(biāo)注功能(完整代碼)

    Python tkinter實(shí)現(xiàn)圖片標(biāo)注功能(完整代碼)

    tkinter是Python下面向tk的圖形界面接口庫(kù),可以方便地進(jìn)行圖形界面設(shè)計(jì)和交互操作編程,本文通過(guò)實(shí)例代碼給大家介紹的Python tkinter實(shí)現(xiàn)圖片標(biāo)注功能,感興趣的朋友一起看看吧
    2019-12-12
  • Python腳本在Appium庫(kù)上對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測(cè)試

    Python腳本在Appium庫(kù)上對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測(cè)試

    這篇文章主要介紹了使用Python的Appium庫(kù)對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測(cè)試的教程,屬于Python腳本的一個(gè)自動(dòng)化應(yīng)用,需要的朋友可以參考下
    2015-04-04
  • python基于tkinter制作圖形界面的2048游戲

    python基于tkinter制作圖形界面的2048游戲

    這篇文章主要介紹了python基于tkinter制作圖形界面的2048游戲的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 深入理解Python中的 __new__ 和 __init__及區(qū)別介紹

    深入理解Python中的 __new__ 和 __init__及區(qū)別介紹

    這篇文章主要介紹了深入理解Python中的 __new__ 和 __init__及區(qū)別介紹,這兩個(gè)方法的主要區(qū)別在于:__new__ 負(fù)責(zé)對(duì)象的創(chuàng)建而 __init__ 負(fù)責(zé)對(duì)象的初始化。具體內(nèi)容詳情大家跟隨小編一起看看吧
    2018-09-09
  • Pycharm中如何編寫(xiě)B(tài)ash批處理命令

    Pycharm中如何編寫(xiě)B(tài)ash批處理命令

    這篇文章主要介紹了Pycharm中如何編寫(xiě)B(tài)ash批處理命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 如何使用python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)

    如何使用python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)

    編寫(xiě)一個(gè)應(yīng)用系統(tǒng)需要多方面的知識(shí)和技能,下面這篇文章主要給大家介紹了關(guān)于如何使用python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-04-04
  • VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令

    VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令

    這篇文章主要給大家介紹了關(guān)于VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令,Python環(huán)境的創(chuàng)建是在VSCode中很常見(jiàn)的一個(gè)需求,特別是當(dāng)我們需要開(kāi)發(fā)或者調(diào)試多個(gè)Python項(xiàng)目時(shí),使用虛擬環(huán)境是一種好的方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論