游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:789

当前位置:游戏蛮牛 技术专区 教程分享

查看: 636|回复: 1

[unigine引擎] (转)在u3d中截图,使用wwwform提交保存图片到web服务器

[复制链接]  [移动端链接]
排名
16616
昨日变化
6

6

主题

15

帖子

96

积分

Rank: 2Rank: 2

UID
265522
好友
0
蛮牛币
185
威望
0
注册时间
2018-1-20
在线时间
37 小时
最后登录
2018-10-12
发表于 2018-2-8 15:20:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
转至http://www.ceeger.com/forum/read.php?tid=20260
最近做了这样一个功能,就是用户自行选择一个视角后,通过快捷键的方式,给u3d进行截图,然后将其上传到web服务器。
话不多说,直接上代码:
  1.u3d里面的脚本内容如下:

using UnityEngine;
using System.Collections;
using System.IO;


/*
* 实现从u3d中截图上传到web服务器上的方法
* */




public class UpLoadFile : MonoBehaviour {


private string  gs_ServerUrl= "http://localhost:8080/bigsystem/UploadUnityImage";
private string gs_FileName="unityPic";
   
  
  
//提供给web端调用的截图方法
public void captureImage(string pajson){
LitJson.JsonData json=LitJson.JsonMapper.ToObject(pajson);
string ImageName=json["ImageName"].ToString();
string url=json["Url"].ToString();
if(!string.IsNullOrEmpty(url))gs_ServerUrl=url;
if(!string.IsNullOrEmpty(ImageName))gs_FileName=ImageName;
StartCoroutine(UploadPNG());
}
  
  
  
IEnumerator UploadPNG() {
yield return new WaitForEndOfFrame();


int width = Screen.width;
int height = Screen.height;
Texture2D tex = new Texture2D( width, height, TextureFormat.RGB24, false );
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0 );
tex.Apply();
  
byte[] bytes =tex.EncodeToPNG();


WWWForm form = new WWWForm();
  System.Collections.Hashtable headers = form.headers;
  headers["Content-Type"]="multipart/form-data";
form.AddBinaryData(gs_FileName, bytes, gs_FileName, "image/png");
  


string ls_HandleInfo="true";
  
  WWW w = new WWW(gs_ServerUrl, form);
yield return w;


if (w.error != null)ls_HandleInfo="false";
Application.ExternalCall("UploadFileFun",ls_HandleInfo);
}
}
   2.java web端的配置如下
         我使用的是commons-fileupload-1.2.2进行文件上传管理


web.xml中只需要配置一个servlet处理类就行了:

  <servlet>
<servlet-name>UnityImage</servlet-name>
<servlet-class>fileUpload.FileManager</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UnityImage</servlet-name>
<url-pattern>/UploadUnityImage</url-pattern>
</servlet-mapping>


对应的处理类如下:

package fileUpload;


import java.io.File;
import java.io.IOException;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


public class FileManager extends HttpServlet{
private static final long serialVersionUID = 1L;
/** 响应 form的post 请求 **/
  
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
  
request.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");


// true:request支持文件上传;false:request出了问题,如<form>没有添加ENCTYPE="multipart/form-data"
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory(); // 磁盘
ServletFileUpload upload = new ServletFileUpload(factory); // 文件
  
try {
// 解析request对象,得到一个保存全部上传数据的List对象
List<FileItem> files = upload.parseRequest(request);


for (FileItem file : files) {


// 取出上传文件的文件名称
String name = file.getName(); // Unity的WWWForm上传来的不带后缀名
// 获取文件类型
String type = "." + file.getContentType().substring( file.getContentType().indexOf("/") + 1 );
// 保存在服务器的目标目录
  
String path =request.getSession().getServletContext().getRealPath("/upload/"+name+type);
//this.getServletContext().getRealPath("/") + File.separatorChar + name + type;
  
// 如果不是纯文本数据,即是文件
if (!file.isFormField() && type.equals(".png")) {
// 上传文件
File uploadedFile = new File(path);
file.write(uploadedFile);
  
// 向Unity发送消息(服务器名+端口+项目名+文件)
resp.getWriter().write("http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/" + name + type);
}
else{
// 向Unity发送消息
resp.getWriter().write("限定使用png格式图片!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
[发帖际遇]: 一个袋子砸在了 SQw 头上,SQw 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
2710/5000
排名
2984
昨日变化
14

2

主题

1836

帖子

2710

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
241666
好友
0
蛮牛币
10404
威望
0
注册时间
2017-9-6
在线时间
406 小时
最后登录
2018-10-16
发表于 2018-2-9 08:28:06 来自Mobile--- | 显示全部楼层
感谢分享

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表