有一个jsp,具有文件上传功能,浏览器访问可以进行文件上传。 但是用swing嵌入浏览器,在浏览器中访问这个jsp,文件上传却失败了,且服务端未接收到相关请求。
jsp代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
<link rel="stylesheet" type="text/css" href="../themes/metro/easyui.css" />
<link rel="stylesheet" type="text/css" href="../themes/icon.css" />
<link rel="stylesheet" type="text/css" href="../themes/color.css" />
<script type="text/javascript" src="../js/jquery.min.js"></script>
<script type="text/javascript" src="../js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="../js/easyui-lang-zh_CN.js"></script>
</head>
<body>
<div id="toolbar_model_style" style="padding: 4px">
<a href="javascript:model_style_upload()"
class="easyui-linkbutton" iconcls="icon-add" plain="true">新建</a>
</div>
<div id="dialog_model_style_upload" class="easyui-dialog"
title="新建模板" style="width: 800px; height: 760px; overflow: hidden"
data-options=" modal: true, closed: true">
<form id="upModelStyleForm" enctype="multipart/form-data" method="post">
图片文件:<input id="file" type="file" name="file" accept="image/png" /> <br>
模板名:<input id="mStyleName" type="text" name="mStyleName" maxlength="6" placeholder="名称长度不超过6位" style="width: 310px;" /> <br> <br>
</form>
<div align="right">
<button id="upModelStyleBtn">上传模板</button>
</div>
</div>
<table id="datagrid_model_style" class="easyui-datagrid"
title="<span style='color:red;'>【模板列表】</span>"
data-options="
url:'/model/style/list?t='+ Math.random(),
toolbar:'#toolbar_model_style',
fit:true, border:false, singleSelect:true, collapsible:true, rownumbers:false, fitColumns:true,
">
<thead>
<tr>
<th data-options="field:'myModelStyle',checkbox:true"></th>
<th data-options="field:'styleName',width:50">模板名称</th>
<th data-options="field:'background',width:160,formatter:img_formatOper">模板图片 </th>
</tr>
</thead>
</table>
<script type="text/javascript">
//上传 模板
function model_style_upload()
{
$("#dialog_model_style_upload").dialog("open");
$("#upModelStyleForm").form("clear");
$("#upModelStyleForm").form("reset");
$("#upModelStyleBtn").click(
function() {
var formData = new FormData($('#upModelStyleForm')[0]);
$.ajax({
type : 'post',
url : "http://192.168.31.228:14020/model/style/add?size=100",
data : formData,
cache : false,
processData : false,
contentType : false,
}).success(
function(data) {
if (data.code != "10000") {
$.messager.alert( '系统提示', data.msg, 'error');
return;
}
document.getElementById("upModelStyleForm").reset();
$('#upModelStyleForm').form('clear');
$('#dialog_model_style_upload').dialog("close");
$("#datagrid_model_style").datagrid('reload');
});
});
return ;
}
</script>
</body>
</html>
服务端代码:
// 保存 模板文件
@RequestMapping("/model/style/add")
@ResponseBody
public Map<String, Object> saveModelStyle( MultipartFile file, String mStyleName, String size) {
Map<String, Object> resultMap = new HashMap<String, Object>();
//设置存储的路径
String finalFileName = "/mnt/10086/" + file.getOriginalFilename();
// 保存文件
file.transferTo(new File(finalFileName));
//返回保存结果
resultMap.put("code", "10000");
resultMap.put("msg", "模板样式新建成功!");
return resultMap;
}
Swing包裹jsp的代码:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import chrriis.common.UIUtils;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
public class SimpleWebBrowserExample {
public static JComponent createContent() {
JPanel contentPane = new JPanel(new BorderLayout());
JPanel webBrowserPanel = new JPanel(new BorderLayout());
webBrowserPanel.setBorder(BorderFactory.createTitledBorder("模板管理"));
final JWebBrowser webBrowser = new JWebBrowser();
webBrowser.navigate("http://192.168.31.228:14020/jsp/model.jsp");
webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
contentPane.add(webBrowserPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());
menuBarCheckBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);
}
});
buttonPanel.add(menuBarCheckBox);
contentPane.add(buttonPanel, BorderLayout.SOUTH);
return contentPane;
}
public static void main(String[] args) {
NativeInterface.open();
UIUtils.setPreferredLookAndFeel();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Model_Manage");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createContent(), BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
NativeInterface.runEventPump();
}
}
阿里云OSS提供的分片上传(Multipart Upload)和断点续传功能,可以将要上传的文件分成多个数据块(OSS里又称之为Part)来分别上传,上传完成之后再调用OSS的接口将这些Part组合成一个Object来达到断点续传的效果。
适用场景 当使用简单上传(PutObject)功能来上传较大的文件到OSS的时候,如果上传的过程中出现了网络错误,那么此次上传失败,重试必须从文件起始位置上传。针对这种情况,您可以使用分片上传来达到断点续传的效果。
相对于其他的上传方式,分片上传适用于以下场景: 恶劣的网络环境:如手机端,当出现上传失败的时候,可以对失败的Part进行独立的重试,而不需要重新上传其他的Part。 断点续传:中途暂停之后,可以从上次上传完成的Part的位置继续上传。 加速上传:要上传到OSS的本地文件很大的时候,可以并行上传多个Part以加快上传。 流式上传:可以在需要上传的文件大小还不确定的情况下开始上传。这种场景在视频监控等行业应用中比较常见。 分片上传操作方式 操作方式 说明 命令行工具ossutil 命令行工具,性能好 Java SDK 丰富、完整的各类语言SDK demo Python SDK PHP SDK Go SDK C SDK .NET SDK 断点续传操作方式 在使用分片上传的过程中,如果系统意外崩溃,可以在重启的时候通过ListMultipartUploads和ListParts两个接口来获取某个Object上的所有的分片上传任务和每个分片上传任务中上传成功的Part列表。这样就可以从最后一块成功上传的Part开始继续上传,从而达到断点续传的效果。暂停和恢复上传实现原理也是一样的。 操作方式 说明 Java SDK 丰富、完整的各类语言SDK demo Python SDK Go SDK C SDK .NET SDK Android SDK iOS SDK
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。