我使用jQuery的ajax函数将文件发送到服务器端PHP脚本时遇到问题.可以获取文件列表$('#fileinput').attr('files')但是如何将此数据发送到服务器?使用文件输入时$_POST,服务器端php脚本上的结果array()为0(NULL).
我知道这是可能的(虽然我到目前为止还没有找到任何jQuery解决方案,只有Prototye代码(http://webreflection.blogspot.com/2009/03/safari-4-multiple-upload-with-progress.html) ).
这似乎是相对较新的,所以请不要通过XHR/Ajax提及文件上传,因为它肯定有用.
我需要Safari 5中的功能,FF和Chrome会很好但不是必需的.
我现在的代码是:
$.ajax({
url: 'php/upload.php',
data: $('#file').attr('files'),
cache: false,
contentType: 'multipart/form-data',
processData: false,
type: 'POST',
success: function(data){
alert(data);
}
});
Run Code Online (Sandbox Code Playgroud) 我想通过上传图像和员工数据来在系统中创建员工信息.我能够使用球衣进行不同的休息呼叫.但我希望在一次休息电话中实现.我提供下面的结构.请帮我解决这方面的问题.
@POST
@Path("/upload2")
@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response uploadFileWithData(
@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
Employee emp) {
//..... business login
}
Run Code Online (Sandbox Code Playgroud)
每当我想要做的时候,我都会在Chrome邮递员中出错.我的Employee json的简单结构如下所示.
{
"Name": "John",
"Age": 23,
"Email": "john@gmail.com",
"Adrs": {
"DoorNo": "12-A",
"Street": "Street-11",
"City": "Bangalore",
"Country": "Karnataka"
}
}
Run Code Online (Sandbox Code Playgroud)
但是我可以通过进行两次不同的调用来实现,但我希望在一次休息调用中实现,这样我就可以接收文件以及员工的实际数据.
请求您在这方面提供帮助.
我试图发送一些表单而不重新加载页面,我试图理解引擎盖下的细节,因此不使用任何JavaScript库:
var http = createRequestObject();
function createRequestObject() {
var objAjax;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
objAjax=new XMLHttpRequest();
}
else
{// code for IE6, IE5
objAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
return objAjax;
}
function display_progress() { ... }
function upload_file() {
var request = 'UploaderServlet';
http.open('post', request);
http.onreadystatechange = display_progress;
http.send(null); // HERE PROBABLY THE DATA SHOULD BE SENT
}
<form enctype="multipart/form-data" id="upload_form" name="upload_form" method="POST" action="UploaderServlet" onsubmit="upload_file(); return false;" target="upload_target">
Choose a file <br />
<input name="file" size="27" …Run Code Online (Sandbox Code Playgroud) 我有一个Jersey REST服务,将向其发布数据.将有一个CSV文件,它是该CSV的实际数据和一些元数据(元素可以是JSON或XML格式).如果需要发布这两个方法,那么方法签名和附加注释应该如何发布呢?
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public CreateTaskVO provideService(@FormParam("meta") String v1,
@FormParam("data") InputStream v2) {
Run Code Online (Sandbox Code Playgroud)
在这里,我设想第一个参数是元数据的JSON字符串,第二个参数是实际数据的输入流.这会有用吗?
我需要将一个文件附加到我的服务端点.我通过POSTMAN(chrome浏览器插件测试休息服务)测试了功能,它运行正常.
但是我需要用JUNIT测试它.对于这种情况,我使用的是RESTeasy客户端.
我正在尝试使用此代码:
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader("C:/Temp/tempfile.txt"));
try {
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
}
finally {
br.close();
}
byte[] file = sb.toString().getBytes();
Client client = ClientBuilder.newClient();
Invocation.Builder builder = client.target(webTarget.getUri()
+ "/attachment" ).request(MediaType.MULTIPART_FORM_DATA_TYPE);
Response response = builder.post(Entity.entity(file, MediaType.MULTIPART_FORM_DATA), Response.class);
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界
这有什么解决方案吗?
或者任何人都可以提供示例RESTeasy rest客户端代码来附加文件?
我在尝试用JAX-RS解决此问题时遇到了麻烦,我认为这与编组/解组过程有关(我想我不太了解),我想重新创建此:
进行发布的REST端点是/ rest / register,因此我的服务定义如下:
@ApplicationPath("/rest")
public interface RestRegistration {
@POST
@Path("/register")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
String register(UsernameRegistration usernameAccess, String network) throws RegistrationException;
@POST
@Path("/register")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
String register(EmailRegistration emailAccess, String network) throws RegistrationException;
}
public class RestRegistrationImpl implements RestRegistration {
public String register(UsernameRegistration usernameAccess, String network) throws RegistrationException {
return "StackOverflow example: username=" + usernameAccess.getUser + ", network="+network;
}
public String register(EmailRegistration emailAccess, String network) throws RegistrationException{
return "StackOverflow example: email=" + emailAccess.getEmail + ", network="+network;
}
}
Run Code Online (Sandbox Code Playgroud)它应该至少接收两个不同的JSON消息:
{ "usernameAccess" …Run Code Online (Sandbox Code Playgroud)我正在尝试使用Jersey + Jackson编写一个休息服务来上传文件以及其他一些文件信息.
使用multipart,文件正确上传,简单字段也可以,但是应该包含其他数据的POJO始终为null.
简化示例
POJO:
public class Test {
public String name;
public Test() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
应用:
@ApplicationPath("myapp")
public class JerseyApp extends ResourceConfig {
public JerseyApp() {
register(MultiPartFeature.class);
register(JacksonFeature.class);
packages("com.test.rest");
// Enable Tracing support.
property(ServerProperties.TRACING, "ALL");
}
}
Run Code Online (Sandbox Code Playgroud)
服务:
@Path("file")
public class FileRestService {
@POST
@Path("/upload1")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createFile1(@FormDataParam("doc") Test doc) {
//doc is always null
return Response.ok(doc.getName()).build();
}
@POST
@Path("/upload2")
@Consumes(MediaType.APPLICATION_JSON) …Run Code Online (Sandbox Code Playgroud)