文件上传下载

1、文件上传(upload

文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

1.1 文件上传时,对页面的form表单有如下要求:

method="post" 采用post方式提交数据
enctype="multipart/form-data"采用multipart格式上传文件
type="file"使用input的file控件上传

1.2 举例:

<form method="post" action="/common/upload" enctype="multipart/form-data">
    <input name="myFile" type="file"  />
    <input type="submit" value="提交" /> 
</form>

1.3 服务端要接收客户端页面上传的文件,通常都会使用Apache的两个组件:

<1> commos-fileupload

<2> commos-io

底层还是基于上面两个组件,Spring框架在spring-web包中对文件上传进行了封装,大大简化了服务端代码,我们只需要在Controller的方法中声明一个MultipartFile类型的参数即可接收上传的文件,例如:

    /**
     * application.yml文件中配置了文件存放路径
       mydir:
         path: D:\img\
     * */

    @Value("${mydir.path}")
    private String basePath;

    /**
     * 文件上传
     * */

    @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {

        //file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
        log.info(file.toString());

        //原始文件名
        String originalFilename = file.getOriginalFilename();//如abc.jpg

        //获取文件后缀如.jpg
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        //使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
        String fileName = UUID.randomUUID().toString()+suffix;//如dfsgkbdabc.jpg

        //创建一个目录对象
        File dir = new File(basePath); //  D:\img\

        //判断当前目录是否存在
        if (!dir.exists()){
            //目录不存在,需要创建
            dir.mkdirs();
        }

        try {
            //将临时文件转存到指定位置
            file.transferTo(new File(basePath+fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.success(fileName);
    }

2、文件下载(download

文件下载,也称为download是指将文件从服务器传输到本地计算机的过程。

2.1 通过浏览器进行文件下载,通常有两种表现形式:

<1> 以附件形式下载,弹出保存对话框,将文件保存到指定磁盘目录

<2> 直接在浏览器中打开

通过浏览器进行文件下载,本质上就是服务端将文件以流的形式写回浏览器的过程。

2.2 文件下载,如下代码举例:

<!-- 文件下载,页面可以使用<img>标签展示下载的图片 -->
<img v-if="imageUrl" :src="imageUrl" class="avatar"></img>

//发请求
downloadAvatarSuccess (response){
    this.imgeUrl =  this.imageUrl = `/download?name=${response.data}`
}
    /**
     * 文件下载
     * */
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

        try {
            //输入流,通过输入流读取文件内容
            //如 basePath+name 可为 D:\img\abdgfhxrg.jpg等
            FileInputStream fileInputStream = new FileInputStream(new File(basePath+name));
            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片了
            ServletOutputStream outputStream = response.getOutputStream();
            
            //设置响应数据格式
            response.setContentType("image/jpeg");

            int len = 0;
            byte[] bytes = new byte[1024];

            //文件输入流读入bytes字节数组中
            while ((len=fileInputStream.read(bytes)) != -1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }

            //关闭资源
            outputStream.close();
            fileInputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Django文件上传下载的步骤: 1. 创建Django项目和应用程序: ```shell django-admin startproject file_upload cd file_upload python manage.py startapp uploader ``` 2. 配置URL路由: 在项目的urls.py文件中,添加以下代码: ```python from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('uploader/', include('uploader.urls')) ] ``` 3. 创建文件上传表单: 在应用程序的forms.py文件中,创建一个文件上传表单: ```python from django import forms class FileUploadForm(forms.Form): file = forms.FileField() ``` 4. 创建文件上传视图: 在应用程序的views.py文件中,创建一个文件上传视图: ```python from django.shortcuts import render from .forms import FileUploadForm def upload_file(request): if request.method == 'POST': form = FileUploadForm(request.POST, request.FILES) if form.is_valid(): file = form.cleaned_data['file'] # 处理文件上传逻辑 # 保存文件到服务器或者其他操作 return render(request, 'success.html') else: form = FileUploadForm() return render(request, 'upload.html', {'form': form}) ``` 5. 创建文件上传模板: 在应用程序的templates文件夹中,创建upload.html模板文件: ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">上传</button> </form> ``` 6. 创建文件上传成功模板: 在应用程序的templates文件夹中,创建success.html模板文件: ```html <h1>文件上传成功!</h1> ``` 7. 配置文件上传URL: 在应用程序的urls.py文件中,添加以下代码: ```python from django.urls import path from .views import upload_file urlpatterns = [ path('upload/', upload_file, name='upload'), ] ``` 现在,您可以通过访问`http://localhost:8000/uploader/upload/`来上传文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值