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

本文介绍了在Play Framework中如何实现文件上传和下载。对于网页版上传,通过multipart/form-data编码处理用户提交的数据和图片。接口版上传则利用java.io.File保存文件,通过MimetypesFileTypeMap判断文件类型,并返回JSON数据给客户端。同时,文章提到了处理静态资源路径的设置以及可能出现的接口字段匹配问题。
摘要由CSDN通过智能技术生成

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,这样就不是你想要的结果。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值