我正在尝试使用jQuery使用multipart/form-data进行HTTP POST调用:
$.ajax({
url: 'http://localhost:8080/dcs/rest',
type: 'POST',
contentType:'multipart/form-data',
data: 'dcs.source=boss-web&query=data&dcs.algorithm=lingo&dcs.output.format=JSON&dcs.clusters.only=true',
//dataType: "jsonP",
success: function(jsonData) {alert('POST alert'); data=jsonData ; },
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log('An Ajax error was thrown.');
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
Run Code Online (Sandbox Code Playgroud)
它不起作用.Firebug返回未定义的错误,返回的XMLHttpRequst对象multipart字段设置为false.
我可以做些什么来使用jQuery工作?如果不可能有一个简单的实现这个?
即idon't不需要传输文件,只需要一些数据.但服务器需要multipart.
我正在编写一个简单的流式JSON服务.它由间歇性发送的JSON消息组成,持续很长一段时间(数周或数月).
通过普通TCP套接字发送多个JSON消息的最佳实践是什么?
我看过的一些替代方案(及其缺点)是:
这样做是否有良好的,或至少是完善的方式?
我想使用类型的post请求上传多个文件,multipart/form-data并且我需要知道服务器端的文件大小(内容长度).
为了构造POST请求,javascript我使用一个FormData对象并将File对象附加到它上面.这样可以正常工作,但除了Content-type标题之外,每个部分只添加一个Content-Disposition标题,但没有Content-length标题,尽管可以从各个File对象获得此信息.
有没有办法实现在发送请求时Content-length为FormData对象的每个部分设置标头?
下面是我使用的代码,包括我对问题的解决方法.它实际上用于angular-js发送请求,但我认为这与问题无关.
var form = new window.FormData();
form.append('additional-field-1', new Blob(['some plain text'], {type : 'text/plain'}));
for (var file in fileList) {
var fileObj = fileList[file];
var count = 1 + parseInt(file, null);
form.append('file-size-' + count, new Blob([fileObj.size], {type : 'text/plain'}));
form.append('file-' + count, fileObj);
}
$http.post(url, form, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).success(.....
Run Code Online (Sandbox Code Playgroud) 我知道Amazon S3为大文件添加了多部分上传.那很棒.我还需要的是客户端的类似功能,对于那些通过下载gigabyte plus文件并有错误的客户来说.
我意识到浏览器有一定程度的重试和恢复内置,但是当你谈论大文件时,我希望能够在不管错误类型的情况下从中断的地方继续.
有任何想法吗?
谢谢,Brian
好的,所以我使用.getcontent并收到javax.mail.internet.MimeMultipart@fd13b5等.
我知道我的代码中需要这样的东西,但我不知道到底需要什么.
if (p.isMimeType("text/plain")) {
pr("This is plain text");
pr("---------------------------");
if (!showStructure && !saveAttachments)
System.out.println((String)p.getContent());
} else if (p.isMimeType("multipart/*")) {
pr("This is a Multipart");
pr("---------------------------");
Multipart mp = (Multipart)p.getContent();
level++;
int count = mp.getCount();
for (int i = 0; i < count; i++)
dumpPart(mp.getBodyPart(i));
level--;
} else if (p.isMimeType("message/rfc822")) {
pr("This is a Nested Message");
pr("---------------------------");
level++;
dumpPart((Part)p.getContent());
level--;
Run Code Online (Sandbox Code Playgroud)
目前我正在尝试将所有信息都放入astring中,然后在GUI上显示,然后我将它全部正常工作,显示身体内容显示为.javax.mail.internet.MimeMultipart@fd13b5.任何帮助将非常感激,因为我很困难.
package EmailTable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message; …Run Code Online (Sandbox Code Playgroud) 我读过对"如何计算多部分HTTP请求内容长度?"这一问题的冲突和有些含糊不清的回复.我特别想知道:
有人能提供一个明确的例子来回答这些问题吗?
如果我在Java中使用此代码,那么它的工作正常.当我在kotlin中转换该代码时,我得到了错误.
08-20 23:46:51.003 3782-3782/com.qkangaroo.app W/System.err:java.lang.IllegalArgumentException:参数类型不能包含类型变量或通配符:java.util.Map(参数#1) 08-20 23:46:51.003 3782-3782/com.qkangaroo.app W/System.err:for方法ApiInterface.updateCustomerDetail 08-20 23:46:51.003 3782-3782/com.qkangaroo.app W/System.err :at retrofit2.ServiceMethod $ Builder.methodError(ServiceMethod.java:752)08-20 23:46:51.004 3782-3782/com.qkangaroo.app W/System.err:at retrofit2.ServiceMethod $ Builder.methodError(ServiceMethod. java:743)08-20 23:46:51.004 3782-3782/com.qkangaroo.app W/System.err:at retrofit2.ServiceMethod $ Builder.parameterError(ServiceMethod.java:761)08-20 23:46:51.004 3782-3782/com.qkangaroo.app W/System.err:at retrofit2.ServiceMethod $ Builder.build(ServiceMethod.java:195)08-20 23:46:51.004 3782-3782/com.qkangaroo.app W/System .err:at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)08-20 23:46:51.005 3782-3782/com.qkangaroo.app W/System.err:a t retrofit2.Retrofit $ 1.invoke(Retrofit.java:147)08-20 23:46:51.005 3782-3782/com.qkangaroo.app W/System.err:at $ Proxy0.updateCustomerDetail(Native Method)08-20 23 :46:51.005 3782-3782/com.qkangaroo.app W/System.err:at com.qkangaroo.app.Fragments.MoreScreen.MoreFragment.updateProfile(MoreFragment.kt:261)08-20 23:46:51.006 3782- 3782/com.qkangaroo.app W/System.err:at com.qkangaroo.app.Fragments.MoreScreen.MoreFragment $ clickListener $ 1.onClick(MoreFragment.kt:191)08-20 23:46:51.006 3782-3782/com .qkangaroo.app W/System.err:在android.view.View.performClick(View.java:3517)08-20 23:46:51.006 3782-3782/com.qkangaroo.app W/System.err:at android .view.View $ PerformClick.run(View.java:14155)08-20 …
目前,我使用以下方法在Pyramid中上传文件(通过HTML表单).
if request.params.get('form.submitted'):
upload_directory = os.getcwd() + '/myapp/static/uploads/'
my_file = request.POST.get('thumbnail')
saved_file = str(upload_directory) + str(my_file.filename)
perm_file = open(saved_file, 'w')
shutil.copyfileobj(my_file.file, perm_file)
my_file.file.close()
perm_file.close()
Run Code Online (Sandbox Code Playgroud)
我只是想知道,这是保存文件上传的好方法,我的方法有任何安全问题吗?我怎么能改进我的方法.谢谢.
在我的项目中,我必须将从Android设备拍摄的图像发送到服务器站点,它应该存储在磁盘上.不幸的是,当我在设备网站上调用该方法时,我遇到了这个错误:
DEBUG/Retrofit(4429): java.lang.RuntimeException:
Unable to write multipart request.
at retrofit.mime.MultipartTypedOutput.buildPart(MultipartTypedOutput.java:86)
at retrofit.mime.MultipartTypedOutput.addPart(MultipartTypedOutput.java:49)
at retrofit.RequestBuilder.setArguments(RequestBuilder.java:211)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:264)
at retrofit.RestAdapter$RestHandler.access$500(RestAdapter.java:197)
at retrofit.RestAdapter$RestHandler$1.obtainResponse(RestAdapter.java:243)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:38)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at retrofit.Platform$Android$2$1.run(Platform.java:134)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.io.FileNotFoundException: /external/images/media/1270:
open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:416)
at java.io.FileInputStream.<init>(FileInputStream.java:78)
at retrofit.mime.TypedFile.writeTo(TypedFile.java:74)
at retrofit.mime.MultipartTypedOutput.buildPart(MultipartTypedOutput.java:83)
... 10 more
Caused by: libcore.io.ErrnoException:
open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at libcore.io.IoBridge.open(IoBridge.java:400)
... 13 more
Run Code Online (Sandbox Code Playgroud)
这是方法的声明
@Multipart
@POST("/monument/photo/upload")
void addMonumentPhoto(@Part("MonumentID") int …Run Code Online (Sandbox Code Playgroud) 我想在我的ASP.NET核心控制器中创建一个动作方法,它返回一个包含多个文件的多部分HTTP响应.我知道使用.zip文件是网站的推荐方法,但我正在考虑使用这样的API请求.
我在ASP.NET Core示例中能够找到的示例与上传文件时的多部分HTTP请求有关.就我而言,我想下载文件.
UPDATE
我提出了以下GitHub问题:#4933
asp.net multipartform-data multipart asp.net-core-mvc asp.net-core
multipart ×10
android ×2
javascript ×2
retrofit ×2
amazon-s3 ×1
angularjs ×1
asp.net ×1
asp.net-core ×1
file-upload ×1
form-data ×1
http ×1
http-headers ×1
jakarta-mail ×1
java ×1
jquery ×1
json ×1
kotlin ×1
ldjson ×1
mime ×1
post ×1
pylons ×1
pyramid ×1
python ×1
streaming ×1
websocket ×1