upload_uploadfile - CSDN
精华内容
参与话题
  • upload上传图片

    千次阅读 2018-04-24 17:08:07
    子组件 (ImageUpload.vue): <template> <div> <div class="flex-img"> &am

    需求分析:
    1.添加商品页面可以添加图片
    2.编辑商品页面可以编辑图片(原来的图片列表上)

    子组件 (ImageUpload.vue):

    <template>
        <div>
            <div class="flex-img">
                <div class="flex-img__item" v-for="(image,index) of imageList" :key="index">
                    <div>
                        <img class="flex-img__image" :src="image">
                    </div>
                    <i class="el-icon-error right-up" @click.stop="handleRemove(index)"></i>
                </div>
    
                <el-upload
                        :action="uploadUrl"
                        :show-file-list="false"
                        accept="image/jpeg,image/jpg,image/png"
                        list-type="picture-card"
                        :limit="imgNumber"
                        :on-success="handleSuccess"
                        :before-upload="beforeUpload">
                    <i class="el-icon-plus"></i>
                </el-upload>
            </div>
    
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过1M</div>
        </div>
    </template>
    
    <script>
        export default {
            props: {
                imageList: Array,
                clearList: Number,
                imgNumber: Number
            },
            data() {
                return {
                    uploadUrl: 'http://xxxx.xxx.xx/api/upload',
                    fileList: this.imageList ? this.imageList : [],
                };
            },
            watch: {
                imageList(value) {
                        this.fileList = value;
                },
                clearList() {
                    this.fileList = [];
                },
                fileList(value) {
                    this.$emit('update:imageList', value);
                }
            },
            methods: {
                handleRemove(index) {
                    this.fileList.splice(index, 1);
                },
                handleSuccess(response) {
                    this.fileList.push(response.url);
                },
                beforeUpload(file){
                    const imageSize = file.size / 1024 / 1024 < 1;
                    if(!imageSize){
                        this.$message.error('上传封面大小不能超过 1MB!');
                    }
                    return imageSize;
                }
            }
        };
    </script>
    
    <style scoped>
        .flex-img
        {
            display: flex;
        }
        .flex-img__item
        {
            position: relative;
    
            box-sizing: border-box;
            width: 148px;
            height: 148px;
            margin: 0 8px 8px 0;
    
            border: 1px solid #c0ccda;
            border-radius: 6px;
            background-color: #fff;
        }
        .right-up
        {
            position: absolute;
            z-index: 1024;
            top: -5px;
            right: -5px;
        }
        .flex-img__image
        {
            width: 146px;
            height: 146px;
    
            border-radius: 6px;
        }
    
    </style>

    父组件:

    <template>
      <div>
         <image-upload :imageList.sync="imageShows" :clearList="clearList"></image-upload>
      </div>
    </template>
    <script>
    import ImageUpload from '../../components/ImageUpload.vue';
    export default{
      components:{
         ImageUpload
      },
      data(){
         clearList:null,//清除图片列表
         imageShows:[]//图片列表
      },
      methods:{
        resetForm(){
          this.clearList = Math.random();//给一个随机数就能清除
        }
      }
    }
    </script>

    报错信息:app.js:1608 [Vue warn]: Error in callback for watcher “fileList”: “TypeError: Cannot create property ‘uid’ on string ‘https://xxx.jpeg‘”
    app.js:2724 TypeError: Cannot create property ‘uid’ on string ‘https://xxx.jpeg
    解决办法:子组件修改方法handleSuccess
    handleSuccess(response) {
    this.fileList.push({response.url});//多了 { },因为它要的是数组,那就传数组进去
    },

    展开全文
  • 组件-Element—Upload(上传)

    千次阅读 2019-07-03 14:56:07
    组件-Element—Upload 组件—上传 点击上传 <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview" :on-remove="handleRemove" ...

    组件-Element—Upload(上传)

    组件—上传

    1. 点击上传
      在这里插入图片描述

      <el-upload
        class="upload-demo"
        action="https://jsonplaceholder.typicode.com/posts/"
        :on-preview="handlePreview"
        :on-remove="handleRemove"
        :before-remove="beforeRemove"
        multiple
        :limit="3"
        :on-exceed="handleExceed"
        :file-list="fileList">
        <el-button size="small" type="primary">点击上传</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <script>
        export default {
          data() {
            return {
              fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
            };
          },
          methods: {
            handleRemove(file, fileList) {
              console.log(file, fileList);
            },
            handlePreview(file) {
              console.log(file);
            },
            handleExceed(files, fileList) {
              this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
            },
            beforeRemove(file, fileList) {
              return this.$confirm(`确定移除 ${ file.name }?`);
            }
          }
        }
      </script>
      
    2. 用户头像上传
      在这里插入图片描述

      <el-upload
        class="avatar-uploader"
        action="https://jsonplaceholder.typicode.com/posts/"
        :show-file-list="false"
        :on-success="handleAvatarSuccess"
        :before-upload="beforeAvatarUpload">
        ![在这里插入图片描述]()
        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
      </el-upload>
      
      <style>
        .avatar-uploader .el-upload {
          border: 1px dashed #d9d9d9;
          border-radius: 6px;
          cursor: pointer;
          position: relative;
          overflow: hidden;
        }
        .avatar-uploader .el-upload:hover {
          border-color: #409EFF;
        }
        .avatar-uploader-icon {
          font-size: 28px;
          color: #8c939d;
          width: 178px;
          height: 178px;
          line-height: 178px;
          text-align: center;
        }
        .avatar {
          width: 178px;
          height: 178px;
          display: block;
        }
      </style>
      
      <script>
        export default {
          data() {
            return {
              imageUrl: ''
            };
          },
          methods: {
            handleAvatarSuccess(res, file) {
              this.imageUrl = URL.createObjectURL(file.raw);
            },
            beforeAvatarUpload(file) {
              const isJPG = file.type === 'image/jpeg';
              const isLt2M = file.size / 1024 / 1024 < 2;
      
              if (!isJPG) {
                this.$message.error('上传头像图片只能是 JPG 格式!');
              }
              if (!isLt2M) {
                this.$message.error('上传头像图片大小不能超过 2MB!');
              }
              return isJPG && isLt2M;
            }
          }
        }
      </script>
      
    3. 照片墙
      在这里插入图片描述

      <el-upload
        action="https://jsonplaceholder.typicode.com/posts/"
        list-type="picture-card"
        :on-preview="handlePictureCardPreview"
        :on-remove="handleRemove">
        <i class="el-icon-plus"></i>
      </el-upload>
      <el-dialog :visible.sync="dialogVisible">
        ![在这里插入图片描述]()
      </el-dialog>
      <script>
        export default {
          data() {
            return {
              dialogImageUrl: '',
              dialogVisible: false
            };
          },
          methods: {
            handleRemove(file, fileList) {
              console.log(file, fileList);
            },
            handlePictureCardPreview(file) {
              this.dialogImageUrl = file.url;
              this.dialogVisible = true;
            }
          }
        }
      </script>
      
    4. 文件缩略图
      在这里插入图片描述

      <el-upload
        action="#"
        list-type="picture-card"
        :auto-upload="false">
          <i slot="default" class="el-icon-plus"></i>
          <div slot="file" slot-scope="{file}">
            <img
              class="el-upload-list__item-thumbnail"
              :src="file.url" alt=""
            >
            <span class="el-upload-list__item-actions">
              <span
                class="el-upload-list__item-preview"
                @click="handlePictureCardPreview(file)"
              >
                <i class="el-icon-zoom-in"></i>
              </span>
              <span
                v-if="!disabled"
                class="el-upload-list__item-delete"
                @click="handleDownload(file)"
              >
                <i class="el-icon-download"></i>
              </span>
              <span
                v-if="!disabled"
                class="el-upload-list__item-delete"
                @click="handleRemove(file)"
              >
                <i class="el-icon-delete"></i>
              </span>
            </span>
          </div>
      </el-upload>
      <el-dialog :visible.sync="dialogVisible">
        ![在这里插入图片描述]()
      </el-dialog>
      <script>
        export default {
          data() {
            return {
              dialogImageUrl: '',
              dialogVisible: false,
              disabled: false
            };
          },
          methods: {
            handleRemove(file) {
              console.log(file);
            },
            handlePictureCardPreview(file) {
              this.dialogImageUrl = file.url;
              this.dialogVisible = true;
            },
            handleDownload(file) {
              console.log(file);
            }
          }
        }
      </script>
      
    5. 图片列表缩略图
      在这里插入图片描述

      <el-upload
        class="upload-demo"
        action="https://jsonplaceholder.typicode.com/posts/"
        :on-preview="handlePreview"
        :on-remove="handleRemove"
        :file-list="fileList"
        list-type="picture">
        <el-button size="small" type="primary">点击上传</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <script>
        export default {
          data() {
            return {
              fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
            };
          },
          methods: {
            handleRemove(file, fileList) {
              console.log(file, fileList);
            },
            handlePreview(file) {
              console.log(file);
            }
          }
        }
      </script>
      
    6. 上传文件列表控制
      在这里插入图片描述

      <el-upload
        class="upload-demo"
        action="https://jsonplaceholder.typicode.com/posts/"
        :on-change="handleChange"
        :file-list="fileList">
        <el-button size="small" type="primary">点击上传</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <script>
        export default {
          data() {
            return {
              fileList: [{
                name: 'food.jpeg',
                url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
              }, {
                name: 'food2.jpeg',
                url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
              }]
            };
          },
          methods: {
            handleChange(file, fileList) {
              this.fileList = fileList.slice(-3);
            }
          }
        }
      </script>
      
    7. 拖拽上传
      在这里插入图片描述

      <el-upload
        class="upload-demo"
        drag
        action="https://jsonplaceholder.typicode.com/posts/"
        multiple>
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      
    8. 手动上传
      在这里插入图片描述

      <el-upload
        class="upload-demo"
        ref="upload"
        action="https://jsonplaceholder.typicode.com/posts/"
        :on-preview="handlePreview"
        :on-remove="handleRemove"
        :file-list="fileList"
        :auto-upload="false">
        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <script>
        export default {
          data() {
            return {
              fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
            };
          },
          methods: {
            submitUpload() {
              this.$refs.upload.submit();
            },
            handleRemove(file, fileList) {
              console.log(file, fileList);
            },
            handlePreview(file) {
              console.log(file);
            }
          }
        }
      </script>
      
    9. Attribute
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    10. Slot
      在这里插入图片描述

    11. Methods
      在这里插入图片描述

    展开全文
  • upload()方法

    千次阅读 2017-07-29 12:11:47
    private void upLoad() { // Bitmap bitmap; // Bitmap bmpCompressed; // for (int i = 0; i () - 1; i++) { // bitmap = BitmapFactory.decodeFile(list.get(i)); //
    private void upLoad() {
           // Bitmap bitmap;
          //  Bitmap bmpCompressed;
        //    for (int i = 0; i < list.size() - 1; i++) {
    //            bitmap = BitmapFactory.decodeFile(list.get(i));
    //            bmpCompressed = Bitmap.createScaledBitmap(bitmap, 640, 480, true);
    //            ByteArrayOutputStream bos = new ByteArrayOutputStream();
    //            bmpCompressed.compress(Bitmap.CompressFormat.JPEG, 100, bos);
    //            byte[] data = bos.toByteArray();
    //            Toast.makeText(UserAddMsgActivity.this, "发送成功" + data.toString(), Toast.LENGTH_SHORT).show();
    
          //  }
            final String url = "http://115.159.217.226/upload.php";
            MultipartBody.Builder mbody = new MultipartBody.Builder().setType(MultipartBody.FORM);
            Bitmap bitmap = null;
            for (int i = 0; i < list.size() - 1; i++) {
                File file = new File(list.get(i));
                String str =   BitmapUtils.compressImageUpload(file.getPath());//得到压缩后的图片的路径
                File compress_file = new File(str);//得到新图片
                mbody.addFormDataPart("image"+i,file.getName(),RequestBody.create(MediaType.parse("application/octet-stream"),compress_file));//将图片加到mbody(以二进制形式传输)
                BitmapUtils.deleteCacheFile();//清除缓存
            }
            RequestBody requestBody = mbody.build();
            Request request = new Request.Builder()
                    .url(url)
                    .post(requestBody)
                    .build();
            final okhttp3.OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
            OkHttpClient okHttpClient  = httpBuilder
                    //设置超时
                    .connectTimeout(1000, TimeUnit.MINUTES)
                    .readTimeout(1000, TimeUnit.MINUTES)
                    .writeTimeout(1000, TimeUnit.MINUTES)
                    .build();
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.e("aa", "uploadMultiFile() e=" + e);
                }
                public void onResponse(Call call, Response response) throws IOException {
                    Log.i("bb", "uploadMultiFile() response=" + response.body().string());
                    Intent intent = new Intent(UserAddMsgActivity.this,MainActivity.class);
                    startActivity(intent);
                }
            });
    
        }
    
    展开全文
  • antd Upload 文件上传

    万次阅读 2018-10-11 16:14:40
    1.antd官网Upload组件: https://ant.design/components/upload-cn/ 2.下图是最近开发的上传文档的效果:   3.文件上传的实现: (1)方法一:antd默认上传。 a:渲染文件上传组件。getPDFURL()方法为...

    1.antd官网Upload组件:

    https://ant.design/components/upload-cn/

    2.下图是最近开发的上传文档的效果:

     

    3.文件上传的实现:

    (1)方法一:antd默认上传。

    a:渲染文件上传组件。getPDFURL()方法为实现文件的上传。showUploadList为是否展示 uploadList, true显示,false不显示,其可设为一个对象,用于单独设定 showPreviewIcon 和 showRemoveIcon。type为上传按钮的图标。如下图所示。

    {/* 渲染文件上传组件 */}
      <Upload {...this.getPdfURL()} showUploadList={false}>
         <Button>
           <Icon type="upload" /> 上传文件
         </Button>
      </Upload>

    b:getPDFURL()方法为实现文件的上传。name是发到后台的文件参数名。action为上传文件的地址。accept是接受上传的文件类型。headers是设置上传的请求头部,IE10 以上有效。onChange是上传文件改变时的状态。代码如下图所示。

    下面为代码:

    getPdfURL = () =>{
            const _this = this;
            const props = {
                name: 'file',
                action: AjaxUrl + 'data/modelFileUpload.svt?cou_id=' + this.state.cou_id,{/*文件上传接口和需要的传参*/}
                accept:"application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document",{/*接受上传的文件类型:此处为.doc格式*/}
                headers: {
                    authorization: 'authorization-text',
                },
                onChange(info) {//上传文件改变时的状态
                    if (info.file.status !== 'uploading') {
                        console.log(info.file, info.fileList);
                    }
                    if (info.file.status === 'done') {
                        message.success(`${info.file.name} 上传成功!`);
                        _this.setState({
                            pdfUrl:AjaxUrl + info.file.response.url,
                            wordName:info.file.response.wordName
                        })
    
                    } else if (info.file.status === 'error') {
                        message.error(`${info.file.name} 上传失败!`);
                    }
                },
            };
            return props;
        }

    注意:accept可以用于设置接口不同类型的文件类型,其不同文件类型设置可参考:https://www.haorooms.com/post/input_file_leixing

    (2)方法二:使用customRequest通过覆盖默认的上传行为,自定义自己的上传实现。

    a:渲染文件上传组件。accept是接受上传的文件类型。customRequest通过覆盖默认的上传行为,customRequest()方法是自定义自己的上传实现。fileList是已经上传的文件列表(受控)。

    <Upload
          accept="application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
          customRequest={this.customRequest}
          beforeUpload = {this.beforeUpload}
          fileList={this.state.fileList}
                    >
         <Button>
           <Icon type='upload' />上传
         </Button>
    </Upload>

    b:customRequest()方法是自定义自己的上传实现。

     

     customRequest = (option)=> {
              const formData = new FormData();
              const fileUrl = AjaxUrl+"data/fileUpload.svt";
              formData.append('files[]',option.file);
             
              reqwest({ /*官网解释:It's AJAX
                            All over again. Includes support
                            for xmlHttpRequest, JSONP, CORS,
                             and CommonJS Promises A.*/
                url: fileUrl,
                method: 'post',
                processData: false,
                data: formData,
                success: (res) => {
                  //res为文件上传成功之后返回的信息,res.responseText为接口返回的值
                  let fileInfo = JSON.parse(res.responseText);
                  if(res){
                    this.setState({
                        fileInfo:fileInfo,
                        loading: false,
                        uploading: false,
                        defaultFile:false
                    })
                  }
                  
                },
                error: () => {
                  this.setState({
                      loading: false,
                      uploading: false
                  })
                  message.error("文件上传失败!");
                },
              });
          }

    注意:reqwest其实就是ajax异步请求。更多了解参考: https://www.npmjs.com/package/reqwest

    说明:上述内容均是自己在开发过程中总结出来,或许还有不足之处,但是希望有些内容能够帮到大家,谢谢观赏!

     

     

     

     

     

     

    展开全文
  • npm install vue-image-crop-upload npm install –save-dev babel-polyfill <template> <div id="app"> <button class="btn" @click="toggleShow">设置头像</button> <my-upload @...
  • upload

    2016-10-08 14:17:20
    //上传  public static String uploadFile(MultipartFile formFile) throws FileNotFoundException,  IOException {  Properties p = Utils.getProp();  // 如果目录不存在,
  • Upload

    2017-08-11 17:37:09
    文件上传类 ...class Upload {  //路径  public $path = './';  //准许的Mime类型  protected $allowMime = array('image/png' , 'image/jpeg' , 'image/jpg' , '
  • 反序列化(强网杯2019—UPLOAD

    千次阅读 2019-05-29 15:26:50
    反序列化(强网杯2019—UPLOAD) 前言 这里主要是复现一下强网杯2019web的第一题,UPLOAD。这是一道反序列化的题,反正我觉得挺难的,当时已经锁定了反序列化的方向也没能完成… 感谢大佬提供的复现环境:...
  • upload.zip

    2020-05-15 08:58:31
    1.代码原理 该程序逐个读取帧图片,并对帧图片逐个进行多行人检测、多目标追踪。该方法是在线方法,将逐个读取帧图片改为逐帧读取视频即可实现在线处理视频。 1.1 多行人检测。 使用gluoncv中的预训练模型faster...
  • AjaxUpLoad.js使用实现文件上传

    万次阅读 2012-11-03 21:50:33
    AjaxUpLoad.js的使用实现无刷新文件上传,如图。 图1 文件上传前 图2 文件上传后 1、创建页面并编写HTML 上传文档: <div class="uploadFile"> <span id="doc"><input type="text" disabled...
  • jquery file upload示例

    万次阅读 2018-02-05 13:50:42
    jquery file uplaod示例
  • upload-labs通关记录

    万次阅读 多人点赞 2019-06-20 10:40:35
    Pass-1 源码: 因为是前端js校验,因此可以直接禁用js 或者用burp抓包修改文件类型(上传1.jpg修改为1.php) Pass-2 源码: 仅仅判断content-type类型,因此上传1.php抓...$is_upload = false; $msg =...
  • Vue.js iView Upload上传和展示

    万次阅读 2018-02-10 10:47:24
    公司项目业务业务需求需要一个能够上传图片附件的功能,发现iView官方有个组件Upload,展示使用方法以及后续的过程。&lt;div class="pic_upload"&gt; &lt;Upload ref="upload" ...
  • Django自定义图片和文件上传路径(upload_to)的2种方式

    万次阅读 多人点赞 2018-06-20 21:43:21
    最近在做一个仿知乎网站的项目了,里面涉及很多图片和文件...Django模型中的ImageField和FileField的upload_to选项是必填项,其存储路径是相对于MEIDA_ROOT而来的。 我们来看一个简单案例(如下所示)。如果你的ME...
  • 深究WS_UPLOAD和GUI_UPLOAD

    千次阅读 2008-10-27 08:11:00
    今天看了下紫光的运维程序,又看到了WS_UPLOAD这个函数,想到还看过一个类cl_gui_frontend_services,它里面也有一些静态方法可以上传文件。今天就研究了下他们之间的区别还有类cl_gui_frontend_services。总结如下...
  • 使用 Jquery AjaxUpload 上传图片

    千次阅读 2018-08-14 12:56:58
    来源:http://www.cnblogs.com/hxling/archive/2010/07/05/1771320.html 本次使用AJAXUPLOAD做为上传客户端无刷上传插件,其最新版本为
  • element-ui upload上传技巧

    万次阅读 热门讨论 2018-09-28 10:26:49
    本文章应用场景是: 前端使用的是vue.js和element-ui。 上传是包含在一个表单...而且element-ui的upload组件上传的路径跟表单保存的路径是不一样的。具体看代码。  &lt;!-- 新增弹窗--&gt; &lt...
  • Nginx和nginx-upload-module安装

    千次阅读 2019-03-17 18:06:15
    Nginx用于提供高性能的web服务和反向代理服务,支持Linux和Windows。靖哥哥也是刚开始接触Nginx,这里主要记录一下Nginx环境搭建的爬坑过程。 ...当然,既然你搜到了这篇文章(靖哥哥的初wen),相信这些知识对你来讲...
  • iview Upload组件的坑

    千次阅读 2019-07-08 09:26:00
    iview Upload 上传显示进度条的坑 直接先来光放代码 上官方文档 demo 代码 <template> <div class="demo-upload-list" v-for="item in uploadList"> <template v-if="item.status === 'finished'...
  • Nginx Upload Module 上传文件功能

    千次阅读 2019-03-28 10:32:02
    Nginx有一个Upload模块,可以非常简单的实现文件上传功能。此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面。下面和大家...
1 2 3 4 5 ... 20
收藏数 517,592
精华内容 207,036
关键字:

upload