精华内容
下载资源
问答
  • 在编写程序的时候,大多数需要对文件进行操作。虽然C语言函数库提供了一些对文件操作的函数,但是对于一些新手来说。如何读取文件是一个大的问题,如果只是简单的从文件中读取一个字符,可以使用getc函数读取。可是...

    在编写程序的时候,大多数需要对文件进行操作。虽然C语言函数库提供了一些对文件操作的函数,但是对于一些新手来说。如何读取文件是一个大的问题,如果只是简单的从文件中读取一个字符,可以使用getc函数读取。可是在读取一段或者整个文件的内容时,很多人都不知道如何下手,下面就简单的说说如何使用C语言读取整个文件的内容。

    (对C基本掌握的人都知道fgets函数可以从文件中读取n个字节的数据,但是fgets存在一个弊端,那就是当读取遇见换行符时就会截至,这可能会导致我们不能获得想要的数据。如果有很多的数据的话,使用fgets读取出来不便于我们查找和操作。所以数据文件我们更多的是使用二进制存储。然后使用fread进行读取操作,这样读取的数据具有一定的格式和结构方便于我们的操作。如果想知道更多更详细的文件操作方法,可以关注博客或者想博主提问)。

    方法:

    注意:引入的头文件为stdio.h

    1/写测试文件

    //写入文件
    void file_w(int n) {
    	int i=0,p[100];
    	FILE *data;
    	for (i; i<n; i++,p[i]=i+2);
    	data=fopen("test.orb","wb");
    	fwrite(p,sizeof(int),n,data);
    	fclose(data);
    }

    2/简单获取文件的字节数

    //返回文件的字节数 
    int int_num() {
    	int t;
    	FILE *data=fopen("test.orb","rb");
    	fseek(data,0L,2);
    	t=ftell(data);
    	fclose(data);
    	return t;
    }

    3/主函数

    int main() {
    	int n;
    	printf("测试数量:");
    	scanf("%d",&n);
    	file_w(n);
    	printf("int的数目:%d,字节数:%d\n",int_num()/sizeof(int),int_num);
    	return 0;
    }

    测试效果图

    在获取文件的字节大小后,我们可以除以变量类型的字节数,然后通过calloc开辟同样大小的空间载入数据,在通过fread进行读取。这样就可以把整个文件的数据读取出来。

     

    展开全文
  • vue +element的上传文件限制文件大小和限制文件类型 element的文件上传的文档中介绍: 参数 说明 类型 accept 接受上传的文件类型(thumbnail-mode 模式下此参数无效) string 下面附上代码 <el-...

    vue +element的上传文件限制文件大小和限制文件类型

    element的文件上传的文档中介绍:

    参数说明类型
    accept接受上传的文件类型(thumbnail-mode 模式下此参数无效)string

    下面附上代码

    	<el-upload
                class="upload-demo"
                action="https://jsonplaceholder.typicode.com/posts/"
                :on-preview="handlePreview"
                :on-remove="handleRemove"
                :on-change="onchange"
                :before-upload="beforeAvatarUpload"
                :before-remove="beforeRemove"
                accept=".rar,.zip,.doc,.docx,.pdf"
                multiple
                :limit="3"
                :auto-upload="false"
                :on-exceed="handleExceed"
                :file-list="fileList"
              >
                <el-button size="small" type="primary">选择附件</el-button>
                <div slot="tip" class="el-upload__tip">
                  支持格式:.rar .zip .doc .docx .pdf ,单个文件不能超过20MB
                </div>
              </el-upload>
    

    实际效果

    在这里插入图片描述
    在这里插入图片描述

    说明

    这里只设置一个accept 是不可行的,用户还可可以选择所有文件进行上传。

    这里可以用on-change进行添加文件的时候进行附加判断,

    fileList是上传文件的集合,判断上传文件的file对象的name和size属性判断新添加文件的类型和大小。

    代码

    //html部分
    	<el-upload
                class="upload-demo"
                action="https://jsonplaceholder.typicode.com/posts/"
                :on-preview="handlePreview"
                :on-remove="handleRemove"
                :on-change="onchange"
                :before-upload="beforeAvatarUpload"
                :before-remove="beforeRemove"
                accept=".rar,.zip,.doc,.docx,.pdf"
                multiple
                :limit="3"
                :auto-upload="false"
                :on-exceed="handleExceed"
                :file-list="fileList"
              >
                <el-button size="small" type="primary">选择附件</el-button>
                <div slot="tip" class="el-upload__tip">
                  支持格式:.rar .zip .doc .docx .pdf ,单个文件不能超过20MB
                </div>
              </el-upload>
    
    //js部分
    	  onchange(file,fileList) {
          let fileName = file.name;
          let uid = file.uid
          let pos = fileName.lastIndexOf(".");
          let lastName = fileName.substring(pos, fileName.length);
          if (
            lastName.toLowerCase() !== ".zip" &&
            lastName.toLowerCase() !== ".rar"&&
            lastName.toLowerCase() !== ".docx"&&
            lastName.toLowerCase() !== ".pdf"
          ) {
            this.$message.error("文件必须为.rar .zip .doc .docx .pdf 类型");
            // this.resetCompressData()
            for(var i = 0;i<fileList.length;i++) {
              if(fileList[i].uid == uid) {
                fileList.splice(i,1)
              }
            }
            return;
          }
          // 限制上传文件的大小
          const isLt =
            file.size / 1024 / 5 >= 1 && file.size / 1024 / 1024 / 20 <= 1;
          if (!isLt) {
            this.$message.error("上传文件大小不得小于5KB,不得大于20MB!");
            for(var i = 0;i<fileList.length;i++) {
              if(fileList[i].uid == uid) {
                fileList.splice(i,1)
              }
            }
          }
          return isLt;
        },
    

    此时,上传限制类型和限制大小的上传功能完成

    结果展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    应大哥的诉求,我的代码确实不完整,下面就是整个上传文件的完整代码

     <div class="page">
        <header>
          <span>{{type=='Note'?'我的笔记':'我的资料'}}</span>
          <div class="btns">
            <el-button @click="refresh">
              <i class="el-icon-refresh"></i>
              刷新
            </el-button>
            <el-button @click="goBack">
              <i class="el-icon-arrow-left"></i>
              返回
            </el-button>
          </div>
        </header>
        <div class="condition">
          <el-row>
            <el-col :span="16">
              <div class="left">
                <div class="condition_item">文件来源</div>
                <div class="condition_item">名称排序</div>
                <div class="condition_item">我的关注</div>
                <div class="condition_item">文件筛选</div>
                <el-input
                  placeholder="请输入内容"
                  prefix-icon="el-icon-search"
                  @keyup.enter.native="onSubmit"
                  v-model="value"
                >
                </el-input>
              </div>
            </el-col>
    
            <el-col :span="8">
              <div class="right" v-if="type=='Data'">
                <el-button @click="NewFolder">
                  <i class="el-icon-folder-add"></i>
                  新建文件夹</el-button
                >
    
                <el-button type="primary" @click="newFile">
                  <i class="el-icon-tickets"></i>
                  新建文件</el-button
                >
              </div>
            </el-col>
          </el-row>
        </div>
        <div class="container">
          <div class="bread" style="height: 50px; line-height: 50px" v-if="type=='Data'">
            <span>全部文件</span>
            <i>/</i>
            <span>全部文件</span>
          </div>
          <div class="head">
            <span> {{type=='Note'?'笔记列表':'数据列表'}} </span>
            <div class="function" v-if="type=='Data'">
              <el-button>
                <i class="el-icon-folder-add"></i>
                分享</el-button
              >
              <el-button>
                <i class="el-icon-tickets"></i>
                下载</el-button
              >
              <el-button>
                <i class="el-icon-star-on"></i>
                关注</el-button
              >
    
              <el-button>
                <i class="el-icon-download"></i>
                下载</el-button
              >
              <el-button>
                <i class="el-icon-edit-outline"></i>
                重命名</el-button
              >
    
              <el-button>
                <i class="el-icon-document-copy"></i>
                复制</el-button
              >
              <el-button>
                <i class="el-icon-rank"></i>
                移动</el-button
              >
    
              <el-button>
                <i class="el-icon-delete"></i>
                删除</el-button
              >
            </div>
          </div>
    
          <table
            style="
              border-color: rgba(233, 233, 233, 1);
              border-right: none;
              border-bottom: none;
            "
            border="1"
            cellpadding="0"
            cellspacing="0"
            width="100%"
          >
            <tr >
              <td width="5%"><el-checkbox v-model="checked"></el-checkbox></td>
              <td>文件</td>
              <td v-if="!isall&&type=='Data'">文件大小</td>
              <td v-if="isall&&type=='Note'">笔记内容</td>
              <td v-if="!isall&&type=='Data'">文件类型</td>
              <td v-if="isall&&type=='Note'">笔记标签</td>
              <td v-if="!isall&&type=='Data'">文件来源</td>
              <td>更新时间</td>
            </tr>
            <tr v-for="(item,index) in collList" :key="index">
              <td><el-checkbox v-model="checked"></el-checkbox></td>
              <td @click="getInto('in',item.id)" v-if="isall&&type=='Data'">{{item.folderName}}==</td>
              <td @click="getInto(item)" v-if="isall&&type=='Note'">{{item.filetitle}}</td>
              <td v-if="!isall&&type=='Data'">2M</td>
              <td v-if="isall&&type=='Note'">{{item.bookmarkName}}</td>
              <td v-if="!isall&&type=='Data'">.DOC</td>
              <td v-if="isall&&type=='Note'">{{item.kgLabels | renders}}</td>
              <td v-if="!isall&&type=='Data'">个人创建</td>
              <td>{{item.createTime}}</td>
            </tr>
          
          </table>
          <div class="fullPage">
            <el-pagination
              @size-change="handleSizeChange"
              @current-change="handleCurrentChange"
              :current-page="currentPage"
              :page-sizes="[10, 20, 30, 50]"
              :page-size="pagesize"
              layout="total, sizes, prev, pager, next, jumper"
              :total="fullpage.total"
            >
            </el-pagination>
          </div>
        </div>
        <el-dialog title="新建文件" :visible.sync="dialogFormVisible">
          <el-form :model="form" :rules="rules">
            <el-form-item
              label="文件标题"
              :label-width="formLabelWidth"
              prop="name"
            >
              <el-input
                v-model="form.name"
                placeholder="请输入文件标题"
                autocomplete="off"
              ></el-input>
            </el-form-item>
            <el-form-item label="文件描述" :label-width="formLabelWidth">
              <el-input
                type="textarea"
                placeholder="请输入文件描述"
                v-model="form.desc"
              ></el-input>
            </el-form-item>
            <el-form-item label="上传文件" :label-width="formLabelWidth">
              <el-upload
                class="upload-demo"
                action="https://jsonplaceholder.typicode.com/posts/"
                :on-preview="handlePreview"
                :on-remove="handleRemove"
                :on-change="onchange"
                :before-upload="beforeAvatarUpload"
                :before-remove="beforeRemove"
                accept=".rar,.zip,.doc,.docx,.pdf"
                multiple
                :limit="3"
                :auto-upload="false"
                :on-exceed="handleExceed"
                :file-list="fileList"
              >
                <el-button size="small" type="primary">选择附件</el-button>
                <div slot="tip" class="el-upload__tip">
                  支持格式:.rar .zip .doc .docx .pdf ,单个文件不能超过20MB
                </div>
              </el-upload>
            </el-form-item>
            <el-form-item label="参与人员" :label-width="formLabelWidth">
              <el-select
                v-model="value2"
                multiple
                collapse-tags
                placeholder="请选择"
              >
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="提醒方式" :label-width="formLabelWidth">
              <el-checkbox-group v-model="form.type">
                <el-checkbox label="站内信" name="type"></el-checkbox>
                <el-checkbox label="邮件" name="type"></el-checkbox>
                <el-checkbox label="信息" name="type"></el-checkbox>
                <span class="mess_num">(短信可用数:1000条)</span>
              </el-checkbox-group>
            </el-form-item>
          </el-form>
          <div slot="footer" class="dialog-footer">
            <el-button @click="dialogFormVisible = false">取 消</el-button>
            <el-button type="primary" @click="dialogFormVisible = false"
              >确 定</el-button
            >
          </div>
        </el-dialog>
        <el-dialog title="添加文件夹" :visible.sync="dialogNewFolder">
          <el-form :model="form">
            <el-form-item>
              <el-input
                v-model="folderName"
                placeholder="输入文件夹名称"
                autocomplete="off"
              ></el-input>
            </el-form-item>
          </el-form>
          <div slot="footer" class="dialog-footer">
            <el-button @click="dialogNewFolder = false">取 消</el-button>
            <el-button type="primary" @click="dialogNewFolder = false"
              >确 定</el-button
            >
          </div>
        </el-dialog>
      </div>
    
    import {GetCollList,getAllNote,GetMyNote,getNoteSearch} from '../../api/apis'
    <script>
    import {GetCollList,getAllNote,GetMyNote,getNoteSearch} from '../../api/apis'
    export default {
      inject:['reload'],
      data() {
        return {
          currentPage: 1,
          pagesize: 10,
          fullpage: {},
          value: "",
          isall: true,
          checked: false,
          dialogFormVisible: false,
          dialogNewFolder: false,
          form: {
            name: "",
            region: "",
            date1: "",
            date2: "",
            delivery: false,
            type: [],
            resource: "",
            desc: "",
          },
          // 当前页面的类型 我的笔记/我的资料
          type:'',
          rules: {
            name: [{ required: true, message: "请输入文件标题", trigger: "blur" }],
          },
          // 文件夹列表
          collList:[],
          folderName: "",
          options: [
            {
              value: "选项1",
              label: "黄金糕",
            },
            {
              value: "选项2",
              label: "双皮奶",
            },
            {
              value: "选项3",
              label: "蚵仔煎",
            },
            {
              value: "选项4",
              label: "龙须面",
            },
            {
              value: "选项5",
              label: "北京烤鸭",
            },
          ],
          value2: [],
          formLabelWidth: "80px",
          fileList: [
            
          ],
        };
      },
      filters:{
          renders(val) {
            if(val){
              var str = ''
              for(var i = 0;i <val.length;i++) {
                str += val[i].labelName+','
              }
              return str.substring(0,str.length-1)
            }
             else {
               return ''
            }
          }
      },
      computed:{
    
      },
      //生命周期 - 创建完成(访问当前this实例)
      created() {},
      //生命周期 - 挂载完成(访问DOM元素)
      mounted() {
        this.GetcollList()
        if(this.$route.query.type == 'Note') {
          this.type = 'Note'
        }else {
          this.type = 'Data'
        }
      },
      methods: {
        // 输入框回车事件
        onSubmit() {
          // if(this.value=='') {
          //   this.$message.info('请输入关键字')
          // }else
            if(this.type=='Data') {
    
          }else {
            getNoteSearch({
              KgMarkName: this.value,
              pageNo : this.currentPage,
              pageSize: this.pagesize,
            }).then((res)=>{
              var { data } = res
              if(data.code == 200 ){
                console.log(data)
                if(data.result.records == []) {
                  return false
                }
                var result = data.result.records
                for(var i = 0 ;i<result.length;i++) {
                  result[i].folderName =  result[i].markFolderName
                }
                this.collList = result
              }else {
                this.$message.error(data.message)
              }
            })
          }
        },
        onchange(file,fileList) {
          let fileName = file.name;
          let uid = file.uid
          let pos = fileName.lastIndexOf(".");
          let lastName = fileName.substring(pos, fileName.length);
          if (
            lastName.toLowerCase() !== ".zip" &&
            lastName.toLowerCase() !== ".rar"&&
            lastName.toLowerCase() !== ".docx"&&
            lastName.toLowerCase() !== ".pdf"
          ) {
            this.$message.error("文件必须为.rar .zip .doc .docx .pdf 类型");
            // this.resetCompressData()
            for(var i = 0;i<fileList.length;i++) {
              if(fileList[i].uid == uid) {
                fileList.splice(i,1)
              }
            }
            return;
          }
          // 限制上传文件的大小
          const isLt =
            file.size / 1024 / 5 >= 1 && file.size / 1024 / 1024 / 20 <= 1;
          if (!isLt) {
            this.$message.error("上传文件大小不得小于5KB,不得大于20MB!");
            for(var i = 0;i<fileList.length;i++) {
              if(fileList[i].uid == uid) {
                fileList.splice(i,1)
              }
            }
          }
          return isLt;
        },
        beforeAvatarUpload(file) {
          let fileName = file.name;
          let pos = fileName.lastIndexOf(".");
          let lastName = fileName.substring(pos, fileName.length);
          if (
            lastName.toLowerCase() !== ".zip" &&
            lastName.toLowerCase() !== ".rar"&&
            lastName.toLowerCase() !== ".docx"&&
            lastName.toLowerCase() !== ".pdf"
          ) {
            this.$message.error("文件必须为.rar .zip .doc .docx .pdf 类型");
            // this.resetCompressData()
            return;
          }
          // 限制上传文件的大小
          const isLt =
            file.size / 1024 / 5 >= 1 && file.size / 1024 / 1024 / 100 <= 1;
          if (!isLt) {
            this.$message.error("上传文件大小不得小于5KB,不得大于100MB!");
          }
          return isLt;
        },
        NewFolder() {
          this.dialogNewFolder = true;
        },
        // 新建文件
        newFile() {
          this.dialogFormVisible = true;
        },
        Personal() {
          this.$router.push("/Personal");
        },
        goBack() {
          this.$router.go(-1);
        },
        // 刷新当前页面
        refresh() {
          this.reload()
        },
        Editing() {
          this.$router.push("/Editing");
        },
        handleSizeChange(val) {
          this.pagesize = val;
          this.GetcollList()
        },
        handleCurrentChange(val) {
          this.currentPage = val;
          this.GetcollList()
        },
        // 进入文件夹
        getInto(index,obj) {
          if (index == 'in') {
            this.isall = false;
            if(this.type=='Data') {
    
            }
          } else {
            this.$router.push({
              path:'/hello',
              query:{
                type:index.datasource,
                id:index.textid,
                name:index.bookmarkId
              }
            });
          }
        },
        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}?`);
        },
        // 获取文件夹
        GetcollList() {
          // 判断是什么类型的页面  Data ---- 我的资料   Note ---- 我的笔记
          if(this.type == 'Data') {
            GetCollList({}).then((res)=>{
              var { data } = res
              if(data.code == 200) {
                this.collList = data.result
              }
            })
          }else {
            GetMyNote({
              pageNo: this.currentPage,
              pageSize :this.pagesize
            }).then((res) => {
              var {data} = res
              if (data.code == 200) {
                var result = data.result.records
                for(var i = 0 ;i<result.length;i++) {
                  result[i].folderName =  result[i].markFolderName
                }
                this.collList = result
              }
            })
          }
        }
      },
    };
    </script>
    
    
    展开全文
  •  在application.yml配置文件中设置文件存储路径(这里假设是本地的E:\ptms中)、以及限制上传文件大小(这里设置为40M)。 # 应用名称 spring: application: name: ptms resources: static-locations: ...

    1、后端部分

          Controller代码

        // 上传
        @PostMapping("upload")
        @ResponseBody
        public Result upload(MultipartFile files, Integer id, String type){
            fileService.upload(files, id, type);
            return success().setRet(0);
        }
    
        // 下载
        @GetMapping("download")
        @ResponseBody
        public void download(HttpServletResponse response, Integer id){
            fileService.download(response, id);
        }

          Service代码

        @Value("${fileServer.storeDir}")
        private String storeDir;
    
        @Autowired
        private FileMapper fileMapper;
    
        @Override
        public void upload(MultipartFile file, Integer id, String type) {
            logger.info("文件关联id:{}, 文件名:{}", id, file.getOriginalFilename());
            logger.info("文件后缀名:{}", file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
            if(!file.isEmpty()){
                String dir = getStoreDir();
    
                File tempFile = new File(dir + System.currentTimeMillis() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
                try {
                    file.transferTo(tempFile);
    
                    FileInfo fileInfo = new FileInfo()
                            .setName(file.getOriginalFilename())
                            .setPath(tempFile.getAbsolutePath())
                            .setSize(tempFile.length())
                            .setTarget(id)
                            .setCreateDate(new Date())
                            .setMd5(FileUtil.md5(tempFile))
                            .setType(type);
                    fileMapper.insert(fileInfo);
    
                } catch (IOException e) {
                    logger.error(e.getMessage(), e);
                    throw new InternalServerException("file build error");
                }
            }
        }
    
    
        @Override
        public void download(HttpServletResponse response, Integer id) {
            FileInfo fileInfo = fileMapper.findFileById(id);
            logger.info("下载文件名:{}", fileInfo.getName());
            File file = new File(fileInfo.getPath());
    
            if (!FileUtil.isExistingFile(file)) {
                throw new ResourceNotFoundException("file not found");
            }
            try (OutputStream outputStream = response.getOutputStream();
                 InputStream inputStream = new FileInputStream(file)) {
    
                response.setContentType("application/octet-stream");
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileInfo.getName(), "UTF-8"));
    
                FileCopyUtils.copy(inputStream, outputStream);
    
            } catch (IOException e) {
                logger.error("下载文件失败!",e);
                throw new RemoteServiceUnavailableException("file download error");
            }
        }
    
        private String getStoreDir(){
            String dir = storeDir + File.separator ;
    //        String dir = storeDir + File.separator + System.currentTimeMillis() + File.separator;
            try {
                FileUtil.mkdir(dir);
            } catch (IOException e) {
                logger.error("获取存储目录失败!",e);
                throw new InternalServerException("file build error");
            }
            return dir;
        }
    
        private void delFile(String path){
            try {
                FileUtil.delete(path);
            } catch (IOException e) {
                logger.error("删除文件失败!",e);
                throw new InternalServerException("file delete error");
            }
    
        }

          在application.yml配置文件中设置文件存储路径(这里假设是本地的E:\ptms中)、以及限制上传文件大小(这里设置为40M)。

    # 应用名称
    spring:
      application:
        name: ptms
      resources:
        static-locations: classpath:/static
        cache:
          period: PT1M        # 60 SECONDS
      servlet:
        multipart:
          max-file-size: 40Mb
          max-request-size: 40Mb
    
    fileServer:
      storeDir: E:\ptms

    2、前端部分

          前端代码如下,只看核心的上传下载即可。上传的控件采用element的el-upload控件,下载采用的是window.location.href。同时,在表单验证完之后,提交表单之前,还做了文件大小的校验,采用的是遍历this.$refs.upload.uploadFiles。

    <template>
      <div>
        <el-form class="mt10 pd10 elForm" :rules="rules" ref="ruleForm" :model="ruleForm" label-width="130px" :label-position="labelPosition">
          <el-form-item label="项目名称:" prop="name" :inline-message="true">
            <el-col :span="8">
              <el-input placeholder="请输入项目名称" v-model="ruleForm.name"></el-input>
            </el-col>
          </el-form-item>
          <el-form-item label="项目版本:" prop="version">
            <el-col :span="8">
              <el-input placeholder="请输入项目版本" v-model="ruleForm.version"></el-input>
            </el-col>
          </el-form-item>
          <el-form-item label="产品系列:" prop="productSeriesId">
            <el-col :span="8">
              <el-select v-model="ruleForm.productSeriesId" placeholder="请选择产品系列" @change="chooseProductSeries" filterable clearable size="medium">
                <el-option v-for="item in productSeries" :key="item.id" :label="item.name" :value="item.id"></el-option>
              </el-select>
            </el-col>
          </el-form-item>
          <el-form-item label="项目起止:" prop="date1">
              <el-date-picker v-model="ruleForm.date1" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd">
              </el-date-picker>
          </el-form-item>
          <el-form-item label="项目描述:" prop="description">
            <el-col :span="8">
              <el-input placeholder="请输入项目描述" v-model="ruleForm.description" type="textarea"></el-input>
            </el-col>
          </el-form-item>
          <el-form-item label="操作备注:" v-if="this.$route.params.id != null">
            <el-col :span="8">
              <el-input placeholder="请输入操作备注" v-model="ruleForm.remark" type="textarea"></el-input>
            </el-col>
          </el-form-item>
          <el-form-item label="已上传附件:" v-if="fileUploaded">
            <el-col :span="11">
              <template>
                <el-table :data="tableData" border>
                  <el-table-column prop="id" label="文件id" v-if="false"></el-table-column>
                  <el-table-column prop="name" label="文件名称" min-width="180" show-overflow-tooltip>
                    <template slot-scope="scope">
                      <a href="javascript:" @click="downloadFile(scope.row.id)" class="aLink">{{scope.row.name}}</a>
                    </template>
                  </el-table-column>
                  <el-table-column prop="size" label="文件大小" min-width="100" show-overflow-tooltip></el-table-column>
                  <el-table-column prop="createDate" label="上传时间" min-width="120" show-overflow-tooltip></el-table-column>
                  <el-table-column label="操作" min-width="100" show-overflow-tooltip>
                    <template slot-scope="scope">
                      <el-button type="text" @click="downloadFile(scope.row.id)">下载</el-button>
                      <el-button type="text" @click="deleteFile(scope.row.id)">删除</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </template>
            </el-col>
          </el-form-item>
          <el-form-item label="附件上传:">
            <el-col :span="8">
              <el-upload class="upload-demo" ref="upload" name="files" :data="uploadData" action="/ptms/api/v1/File/upload" multiple
                :on-preview="handlePreview" :on-remove="handleRemove" :on-success="handleSuccess" :on-error="handleError" :auto-upload="false">
                <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
                <span slot="tip" class="el-upload__tip" style="margin-left: 20px; font-weight: bold">单个文件大小不超过{{maxFileSize}}}M</span>
              </el-upload>
            </el-col>
          </el-form-item>
          <el-form-item>
            <template slot-scope="scope">
              <el-button type="primary" @click="submit('ruleForm')" class="btn-min-w">提交</el-button>
              <el-button @click="cancel()"  class="btn-min-w">返回</el-button>
            </template>
          </el-form-item>
        </el-form>
      </div>
    </template>
    <script>
      import tableOperation from '@/components/layout/tableOperation'
      import  * as api from '@/api/ptms'
      import {tips} from '../../static/js/global.js'
      import moment from 'moment'
      export default {
        inject:['reload'],
        components:{ tableOperation},
        data(){
          return{
            labelPosition: 'right',
            ruleForm: {
              name:'',
              version:'',
              description:'',
              productSeriesId: '',
              date1: [],
              createdBy: sessionStorage.getItem("userId"),
              actor: sessionStorage.getItem("username"),
              remark: '',
            },
            productSeries: [],
            rules: {
              name: [
                { required: true, message: '请输入项目名称', trigger: 'blur' }
              ],
            },
            uploadData:{
              id: null,
              type: 'project'
            },
            id: null,
            tableData: [{}],
            fileUploaded: false,
            maxFileSize: 40,
          }
        },
        created() {
          // 跳转页面获取信息
          api.projectForm({id: this.$route.params.id})
            .then((res)=>{
              if(res.ret > -1){
                console.log(res.data)
                this.productSeries = res.data.productSeries;
                 if(this.$route.params.id != null){
                  this.ruleForm.name = res.data.project.name;
                  this.ruleForm.version = res.data.project.version;
                  this.ruleForm.description = res.data.project.description;
                  this.ruleForm.productSeriesId = res.data.project.productSeriesId;
                  this.ruleForm.createdBy = res.data.project.createdBy;
                  if(res.data.project.startTime != null){
                    this.ruleForm.date1.push(new Date(res.data.project.startTime));
                  }
                  if(res.data.project.endTime != null){
                    this.ruleForm.date1.push(new Date(res.data.project.endTime));
                  }
    
                  this.id = this.$route.params.id;
    
                  this.showFileList(this.id);
                }
              }
            })
        },
        methods:{
    
          chooseProductSeries(val){
            this.ruleForm.productSeriesId = val;
          },
    
          // 添加、修改项目
          submit(formName) {
            this.$refs[formName].validate((valid) => {
              if(valid){
                //文件大小校验
                let flag = true;
                this.$refs.upload.uploadFiles.map((item) => {
                  if(item.size / 1024 / 1024 > this.maxFileSize){
                    tips(this, item.name + '超过允许文件大小' + this.maxFileSize + 'M,请重新选择!', 'warning');
                    flag = false;
                  }
                });
                if(flag){
                  const id = (typeof (this.$route.params.id) === 'undefined') ? null : this.$route.params.id;
                  let startTime = null;
                  let endTime = null;
                  if(this.ruleForm.date1 != null && this.ruleForm.date1.length > 1){
                    if(typeof this.ruleForm.date1[0] === 'object'){
                      startTime = moment(this.ruleForm.date1[0]).format("YYYY-MM-DD");
                      endTime = moment(this.ruleForm.date1[1]).format("YYYY-MM-DD");
                    }else{
                      startTime = this.ruleForm.date1[0];
                      endTime = this.ruleForm.date1[1];
                    }
                  }
    
                  api.projectFormAction({id: id, name: this.ruleForm.name, version: this.ruleForm.version, createdBy: this.ruleForm.createdBy,
                    productSeriesId: this.ruleForm.productSeriesId, description:this.ruleForm.description, startTime: startTime,
                    endTime:endTime, actor: this.ruleForm.actor, remark: this.ruleForm.remark})
                    .then((res)=>{
                      console.log("项目信息", res.data)
                      if(res.data === "existed"){
                        tips(this, '该项目名称已存在', 'warning');
                        return;
                      }
                      //上传文件
                      if(this.$refs.upload.uploadFiles.length > 0){
                        this.uploadData.id = res.data;
                        this.submitUpload();
                      }else {
                        tips(this, this.id == null ? '添加成功!' :'修改成功!', 'success');
                        this.$router.push('/projectList');
                      }
    
                    })
    
                }
              }
            })
          },
    
          // 下载文件
          downloadFile(val){
            window.location.href = "/ptms/api/v1/File/download?id=" + val;
          },
    
          // 删除文件
          deleteFile(val){
            this.$confirm('确认删除该附件?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              api.deleteFile({id: val})
                .then((res) => {
                  if(res.ret === 0){
                    tips(this, '附件删除成功!', 'success');
                    this.showFileList(this.id);
                    // this.reload();
                  }
                })
            }).catch(() =>{
              // 取消
            });
          },
    
          // 展示已上传文件列表
          showFileList(id){
            api.getFilesByTarget({target: id, type: this.uploadData.type})
              .then((res) => {
                if(res.data.files.length > 0){
                  this.fileUploaded = true;
                  res.data.files.forEach((item) => {
                    item.size = (item.size / 1024 ).toFixed(2) + " KB";
                    item.createDate = moment(item.createDate).format('YYYY-MM-DD HH:mm:ss');
                  });
                  this.tableData = res.data.files;
                }else {
                  this.fileUploaded = false;
                }
              })
          },
    
          handleSuccess(response, file, fileList){
            console.log("successFile: ", file);
            if(response.ret < 0){
              console.log("response: ", response);
              this.$refs.upload.clearFiles();
              tips(this, '上传失败!', 'error');
            }else {
              tips(this, this.id == null ? '添加成功!' :'修改成功!', 'success');
              this.$router.push('/projectList');
            }
          },
    
          handleError(err, file, fileList){
            console.log("err: ", err);
            console.log("errorFile: ", file);
            tips(this, '上传失败!', 'error');
          },
    
          submitUpload() {
            this.$refs.upload.submit();
          },
    
          handleRemove(file, fileList) {
            console.log(file, fileList);
          },
    
          handlePreview(file) {
            console.log(file);
          },
    
          // 取消返回上一页
          cancel() {
            this.$router.back(-1);
          }
    
        }
      }
    </script>
    <style lang="scss" scoped>
    </style>
    
    
    

    3、最终效果如下

     

    展开全文
  • 文件大小 和 文件占用空间

    千次阅读 2020-10-02 17:29:39
    查看文件大小 $ ls -lh b.txt -rw-rw-r-- 1 liyongjun liyongjun 1 10月 2 16:53 b.txt 文件中仅存放一个字符 ‘b’ ,所以文件大小为 1 查看文件占用空间 $ du -ah 4.0K ./b.txt 文件大小 和 文件占用空间 ...

    创建一个文件 b.txt

    $ echo -n "b" > b.txt
    
    1. 查看文件大小
    $ ls -lh b.txt 
    -rw-rw-r-- 1 liyongjun liyongjun 1 102 16:53 b.txt
    

    文件中仅存放一个字符 ‘b’ ,所以文件大小为 1

    1. 查看文件占用空间
    $ du -ah
    4.0K	./b.txt
    
    1. 文件大小 和 文件占用空间
      文件大小只有 1B,为什么占用空间为 4KB?
      使用 stat 查看文件详情
    $ stat b.txt
      File: ‘b.txt’
      Size: 1               Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d    Inode: 922330      Links: 1
    Access: (0664/-rw-rw-r--)  Uid: ( 1000/  centli)   Gid: ( 1000/  centli)
    Access: 2020-10-02 16:47:00.496640070 +0800
    Modify: 2020-10-02 16:59:34.705082876 +0800
    Change: 2020-10-02 16:59:34.705082876 +0800
     Birth: -
    

    Size:文件的字节数
    Blocks:块数 (ps:个人更倾向于这里应该写成 Sectors,即占用多少扇区)
    IO Block:每块的字节数

    2021/10/27 修订:
    Size:文件大小
    Blocks:文件占用磁盘块数,此时的磁盘块为扇区,一个扇区为 512 字节,即 0.5K
    IO Block:系统的 IO 缓冲区 buffer 大小,为 4096 字节

    文件存储在磁盘上,磁盘的最小存储单位叫做“扇区”(Sector)。每个扇区存储 512 字节。
    操作系统读取硬盘时,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续 8 个 Sector 组成一个 block。

    在这里插入图片描述
    一个“块”只能被一个文件占用,即使一个文件只占用了“块”的一个字节,其他文件也不能再使用这个“块”存储数据。所以文件的占用空间为“块”的整数倍。

    参考:
    理解inode
    文件属性中“大小”和“占用空间”的区别

    展开全文
  • 1.java中获取上传文件大小,时长 在java中获取上传文件的时长方法多种,在此我用其中的一种,不过需要引入一个jave.jar,此jar在maven仓库总下载不到,我保存到自己的网盘中了,链接: ...
  • Java 获取文件大小

    万次阅读 2019-03-30 21:46:57
    Java 获取文件大小 本文介绍几种方法获取文件大小,分别是java io 和 nio 以及第三方库实现。 标准的java io 首先开始一个简单实例计算文件大小,使用File.lenght()方法: private long getFileSize(File file) { ...
  • springboot 通过MultipartFile接受前端传过来的文件时是有文件大小限制的(springboot内置tomact的的文件传输默认为1MB) 超过默认限制值,出现的异常如下: Caused by: java.lang.IllegalStateException: org...
  • 本文拿windows系统举例,先看几张图: 图1 文件大小比占用空间小 ...上面3张图展示了文件大小与占用空间的大小几种情况,前两种场景是比较常见的情况,之所以有时文件大小会比占用空间小...
  • python中获取文件大小We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小。 Python中的文件大小 (File Size in Python) The python os module has stat() function ...
  • linux 文件大小单位显示

    万次阅读 2018-06-08 11:36:43
    在linux中显示文件大小的时候,通常的做法是使用“ls -l”,显示的大小是文件的字节大小。但是,如果文件比较大的话,显示起来不是特别易读,这个时候,可以使用“ls -lh”,就可以使用比较接近文件大小的单位显示...
  • 文章来自:https://blog.csdn.net/mfcing/article/details/53184921获取文件大小Windows提供了好几个API函数来获取文件大小,还可以使用标准C和标准C++库函数来获取(当然了,标准库函数的底层实现也是调用了Windows...
  • linux中查看文件大小,以G为单位

    千次阅读 2020-11-19 19:42:34
    linux中查看文件大小,以G为单位 ls -lh 查看某个单独文件的大小:du -sh hteafile.tar
  • HDFS查看文件大小以及统计 总和

    千次阅读 2020-05-19 15:01:14
    查看每个文件大小(默认是Byte)hadoop fs -du /data/service_data/hadoop/flume_cluster/c_wechat_mpe/ 查看的每个文件大小(计算的是G单位的)hadoop fs -du /name/service_data/hadoop_servie/flume_cluster/...
  • springboot 上传文件设置文件大小限制

    千次阅读 2020-07-14 14:43:43
    //单个文件最大 factory.setMaxFileSize(DataSize.parse("5MB")); /// 设置总上传数据总大小 factory.setMaxRequestSize(DataSize.parse("20MB")); return factory.createMultipartConfig(); }
  • linux 查看文件大小的命令

    千次阅读 2021-01-24 15:32:35
    4、查看当前目录下的文件大小 du -sh /home/* 1 du -h -x --max-depth=1 1 5、ls 简单指令 5.1、查看隐藏文件(文件前缀带 点的) ls -al 1 5.2、当前目录下的文件按照大小(k/M/G)降序排序(对文件夹排序不准确...
  • Linux 查看文件大小并按照大小排序

    千次阅读 2019-10-08 09:51:42
    文件大小: 1 2 3 4 5 6 [root@node ~] # du -sh ./* 4.0K . /anaconda-ks .cfg 39M . /forex-web-4 .8.0.172.zip [root@node ~] # du -h...
  • easyui filebox文件大小校验

    千次阅读 2019-04-12 09:07:38
    上传文件前端可以校验文件大小,也可以后端校验文件大小,前端校验避免了上传完文件之后对文件大小的校验,占用服务器资源,大文件上传时间过长等问题。 实现easyui文件大小校验自定义扩展 $.extend($.fn....
  • JQuery获取文件大小

    千次阅读 2018-07-12 19:50:41
    &lt;input type="file" id="file" /&gt; &lt;script&gt; var size = $("#file")[0].files[0].size; &lt;/script&gt;
  • 1) { fileList.splice(0, 1) } }, 限制文件类型,通过上传之前的钩子:before-upload="beforeUpload" 限制文件大小,就是里面注释的部分 beforeUpload(file) { var testmsg=file.name.substring(file.name....
  • 上传文件到minio文件大小限制

    万次阅读 2020-02-03 23:17:10
    首先说mino好像并没有限制单个文件或者一次上传文件大小的限制。 出现这个问题的原因是springboot限制了上传文件的大小 可以查看源码MultipartProperties类中 从源码中可以得知,maxFileSize,即最大文件大小,...
  • var that = WebUploader.create({ ... // 选完文件后,是否自动上传。  auto: true,  // swf文件路径  swf: '/js/webuploader-0.1.5/Uploader.swf',  // 文件接收服务端。  server: 'url',  ...
  • xshell查看文件大小和删除文件

    千次阅读 2020-03-18 10:19:05
    一.xshell下查看文件个数及大小 1.查看当前目录下的文件数量: ls -l |grep "^-"|wc -l 或 find ./folder_name -type f | wc -l 注:folder_name 指的是:当前 目录下的你要查询的文件夹名 2.查看某文件夹下文件...
  • linux ls 显示文件大小单位 k m g

    千次阅读 2020-04-26 15:17:01
    在Linux中显示文件大小的时候,通常的做法是使用“ls -l”,显示的大小是文件的字节大小。 但是,如果文件比较大的话,显示起来不是特别易读,这个时候,可以使用“ls -lh”,就可以使用比较接近文件大小的单位显示...
  • C语言_获取文件大小

    千次阅读 2018-05-29 17:16:56
    在操作文件时获取文件大小非常简单,我们只需要将文件定位到文件尾,然后在使用ftell获取fp指针到文件第一个字节的偏移量时多少就可以了!//获取文件长度 fseek(fp, 0, SEEK_END); //定位到文件末 int nFileLen =...
  • shell 查看文件大小

    千次阅读 2019-09-12 14:38:01
    1、查看某个目录下哪个文件最大 du -sh *|grep G 2、查看某个目录下文件大小 du -ha xxx.csv 3、查看某个目录下所有文件大小 du -ha 4、查看所有目录使用空间 df -h ...
  • android 获取文件大小

    万次阅读 2018-01-10 08:43:13
    今天,简单讲讲android在读取文件时,如何获取文件大小。 目前有两种实现方法,一种是使用File的length()方法;另外一种是使用FileInputStream的available()方法,当InputStream未进行read操作时,available()...
  • inputStream.available()获取的是文件的字节大小 InputStream inputStream = new FileInputStream(new File(path)); response.setHeader("Content-Length", String.valueOf(inputStream.available()));....
  • 如何在python中检查文件大小

    千次阅读 2019-12-25 16:22:04
    我在Windows中编写Python脚本。 我想根据文件大小做一些事情。 例如,如果大小大于0,我将向某人发送电子邮件,否则继续其他操作。 如何检查文件大小
  • 问题: 项目中有个功能模块是需要用到FTP协议传输文件,但发现传输成功的文件比原文件大的情况。 首先我先修改了传输的代码,部分源代码如下: byte[] buffer = new byte[1024]; while (inputStream.read(buffer...
  • stat指令:文件/文件系统的详细信息显示。 stat命令主要用于显示文件文件系统的详细信息,该命令的语法格式如下: -f 不显示文件本身的信息,显示文件所在文件系统的信息 -L 显示符号链接 -t 简洁模式,只显示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,298,533
精华内容 919,413
关键字:

文件大小