ファイル処理(アップロード、ダウンロードなど、七牛ベース)
6553 ワード
一、ファイルアップロード
ページtypeはfileのinputラベルで、バックグラウンドに提出されたファイルはrequestで取得できます.取得後はmutipleFileタイプで、直接getbyteでバイトを取得し、インタフェースを呼び出して七牛にアップロードできます.
三、同期ダウンロードもできる(推薦しない、応答時間が長い)
ページはサーバに要求を送信し、サーバはurlを取得してからurlにファイルを要求してページに戻ります.
ページ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();
}
}```