framework上传下载文件(form表单和服务器端接口)

1、playframework中上传提交(网页版)

1.playframework通常通过在web应用中标准的文件上传方式是在表单中使用一个特殊的"multipart/form-data编码,它允许标准表单数据和文件附件混合使用,用法如下:

建User的Model

import play.db.jpa.Blob;
 
@Entity
public class User extends Model {
 
   public String name;
   public Blob photo;
}
提交的form表单

#{form @addUser(), enctype:'multipart/form-data'}
   <input type="file" name="user.photo">
   <input type="submit" name="submit" value="Upload">
#{/form}

添加用户,同时也保存了网页提交的数据

public static void addUser(User user) {
   user.save();
   index();
}
在网页上显示提交的东西,如image,需要在controller中添加一个方法:

public static voiduserPhoto(long id) {
  final User user = User.findById(id);
  notFoundIfNull(user);
  response.setContentTypeIfNotSet(user.photo.type());
  renderBinary(user.photo.get());
}

<img style='width: 100%' src= "@{userPhoto(user.id)}"/>

这样就会上传图片并显示出来~

2、playframework中上传提交(接口版)

通过java.io.File来保存用户提交到服务器的文件,然后返回客户端上传的文件名

(1).通过MimetypesFileTypeMap来判断文件类型

public static String getFileType(java.io.File file){
MimetypesFileTypeMap typeMap = new MimetypesFileTypeMap();
typeMap.addMimeTypes("audio/mp3 mp3");
typeMap.addMimeTypes("audio/ogg ogg");
typeMap.addMimeTypes("video/mp4 mp4");

String fileType =  typeMap.getContentType(file);
return fileType;
}

提示:使用MimetypesFileTypeMap时,需要指定mimetypes,不然提交音频或视频时返回的都是application/octet-stream,加上上方红色部分即可。返回的结果类型如:images/png

(2).提交文件,方法如:

public static void uploadFile(java.io.File uploadFile) 

throws IOException{
if(uploadFile != null){
java.io.File saveFile = new File(Blob.getStore(), 'filePath.type');
if(!saveFile.exists()){

public static MapdataMap= new HashMap();
saveFile.createNewFile();
IO.write(new FileInputStream(uploadFile), saveFile);
flash.put("notice", "已经成功上传"+file.name);
dataMap.put("status_code", status_code);
dataMap.put("msg", msg);
dataMap.put("file_name", file.name);
renderJSON(dataMap);
}
}
}
render();
}

提示:Blob.getStore()时给出data/attachments的动态路径;filePath.type为文件想保存的路径加上文件类型;

      dataMap为返回客户端的json数据;IO.write(new FileInputStream(uploadFile), saveFile)将文件写入。

效果如下:

{

  • status_code0,
  • file_path"/data/attachments/21_sub.jpg",
  • msg""

}

(3).然后按返回的路径去服务器取,便可以得到自己上传的东西,如:


提示:我将上传的东西放在了data/attachments文件夹下,但有时候访问不到,这时候,需要修改conf/routes文件,将data加为静态路径,写法为:

GET     /data/                                staticDir:data

(4).客户端在向服务器请求的时候可能会出现接口字段不匹配的问题,如:需要user_id字段,却提供了id的字段,这样会默认将user_id赋值为0,这样就不是你想要的结果。



你可能感兴趣的:(framework上传下载文件(form表单和服务器端接口))