ファイル処理(アップロード、ダウンロードなど、七牛ベース)

6553 ワード

一、ファイルアップロード
ページtypeはfileのinputラベルで、バックグラウンドに提出されたファイルはrequestで取得できます.取得後はmutipleFileタイプで、直接getbyteでバイトを取得し、インタフェースを呼び出して七牛にアップロードできます.
    public JsonResponse uploadFile(MultipartFile file) {
        JsonResponse response = new JsonResponse();
        try {
            if(file.getBytes().length==0||StringUtils.isBlank(file.getOriginalFilename())){
                response.setStatus(ResponseInfo.ERROR.getStatus());
                response.setMsg("      !     !");
                return response;
            }
            String fileUploadMsg = fileUpload(file.getBytes(), file.getOriginalFilename());
            if(FileUtil.isFileId(fileUploadMsg)){
                response.setData(fileUploadMsg);
                return response;
            }else{
                response.setStatus(ResponseInfo.ERROR.getStatus());
                response.setMsg(fileUploadMsg);
                return response;
            }
        } catch (IOException e) {
            e.printStackTrace();
            response.setStatus(ResponseInfo.ERROR.getStatus());
            response.setMsg("      !     !");
            return response;
        }
    }```
```@Override
    public String fileUpload(byte[] data, String originalFileName) {
        if(StringUtils.isBlank(originalFileName)){
            return "      ";
        }
        if(data.length > 10485760){//         10M
            return "    ";
        }
        String ext = originalFileName.substring(originalFileName.lastIndexOf(".")+1);
        String regex = "^JPG|JEPG|PNG|DOC|DOCX|PDF$";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);//     
        if(!pattern.matcher(ext).matches()){
            return "       ";
        }
        //eg_file       
        File file = new File();
        file.setFileId(IdWorker.nextId(ModelPrefix.FILE));      
        String fileName = originalFileName.substring(0,originalFileName.lastIndexOf("."));
        file.setFileName(fileName);
        file.setExt(ext);
        file.setByteCount(data.length); 
        fileMapper.insertSelective(file);
        try{
            FileUtil.fileUploadByByteArray(data, file.getFileId());
            return file.getFileId();
        }catch(Exception e){
            fileMapper.deleteByPrimaryKey(file.getFileId());
            e.printStackTrace();
        }
        return null;
        
    }```
## 、    
####               url
```@Override
    public JsonResponse getDownloadUrlByFileId(String fileId) {
        JsonResponse response = new JsonResponse();
        if(StringUtils.isBlank(fileId)){
            response.setStatus(ResponseInfo.ERROR.getStatus());
            response.setMsg("        !");
            return response;
        }
        File file = new File();
        file.setFileId(fileId);
        file = fileMapper.selectByPrimaryKey(file);
        if(file!=null&&StringUtils.isNotBlank(file.getFileName())&&StringUtils.isNotBlank(file.getExt())){
            String fileName=file.getFileName()+"."+file.getExt();
            try {
                String fileUrl = FileUtil.getFileUrl(fileId, fileName);
                response.setData(fileUrl);
                return response;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            response.setStatus(ResponseInfo.ERROR.getStatus());
            response.setMsg("     !");
            return response;
        }
        return response;
    }```
####           ,      。       ,   a        
          scope.downloadFile=function(){
              if(scope.egFileId){
                  var url=__ctx+"/file/getDownloadUrlByFileId/"+scope.egFileId;
                  //     
                  $http.get(url).success(function(data){
                      if(data.status==0){
                          if (navigator.userAgent.indexOf('Firefox') >= 0){
                              //            
                              var b=window.open();
                              setTimeout(function(){
                              b.location=data.data;
                              }, 200);
                          }else{
                              var elementObj= document.createElement("a");
                              elementObj.href = data.data;
                              elementObj.click();
                          }
                        
                      }
                  })
              }
          }```

三、同期ダウンロードもできる(推薦しない、応答時間が長い)
ページはサーバに要求を送信し、サーバはurlを取得してからurlにファイルを要求してページに戻ります.
public static ResponseEntity downLoadWithGet(String url,String fileName,String ext) throws Exception{
         CloseableHttpClient httpclient = HttpClients.createDefault();
            try {
                HttpGet httpget = new HttpGet(url);
                httpget.setHeader("Accept-Encoding", "identity");
                HttpResponse response = httpclient.execute(httpget);
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024*10];
                    InputStream is = entity.getContent();
                    int len = 0;
                    while((len=is.read(buffer))!=-1){
                        outStream.write(buffer,0,len);
                    }
                    outStream.close();
                    is.close();
                    HttpHeaders headers = new HttpHeaders();
                    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
                    headers.setContentLength(entity.getContentLength());
                    headers.setContentDispositionFormData("attachment", fileName+"."+ext); 
                    return new ResponseEntity(outStream.toByteArray(),headers, HttpStatus.CREATED);
                } else {
                    throw new ClientProtocolException("Unexpected response status: " + status);
                }
                
            } finally {
                httpclient.close();
            }
    }```