小编vsm*_*kov的帖子

如何摆脱上传文件中的WebKitFormBoundary

我正在Web应用程序中实现文件上传.

前端用angularJS编写,并使用angular-file-upload包(可在此链接中找到的包https://github.com/nervgh/angular-file-upload).

后端是Java/Jersey Web Services.

我的问题是:

上传的文件包含一个WebKitFormBoundary页眉和页脚,如下所示:

------WebKitFormBoundarylqskdjlqksdjl
Content-Disposition: form-data; name="upload"; filename="foo.bar"
Content-Type: multipart/form-data
Run Code Online (Sandbox Code Playgroud)

因此,我不确定我是上传文件还是请求.当然,我的后端应用程序认为上传的文件已损坏,除非删除这些行(现在手动),否则不会显示它们.

底线是:如何在上传的文件中删除页眉和页脚?

以下是一些代码示例.

前端

再次:angularJS angular-file-upload

item.headers = {
    'Content-Disposition': 'attachment; filename="' + item.file.name + '"',
    'Content-Type': 'multipart/form-data'
};
Run Code Online (Sandbox Code Playgroud)

后端

和Java/Jersey

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("someurl/{fileName}")
public Artifact uploadArtifact(InputStream uploadedStream, @PathParam("fileName") String fileName) throws Exception;
Run Code Online (Sandbox Code Playgroud)

注意

我想知道Content-Disposition: attachment我的angularJS部分是否可能会弄乱它?

它应该是Content-Disposition: form-data吗?

Thx提前!

java multipartform-data jersey angularjs

11
推荐指数
1
解决办法
6188
查看次数

Python 3.4错误"必须在散列之前编码Unicode对象"

使用oauth2从Twitter获取数据,但得到的错误为:

必须在散列之前对Unicode对象进行编码

使用下面的代码,

def oauth_req(url, key, secret, http_method="GET", post_body="",http_headers=None):
    consumer = oauth2.Consumer(key=API_KEY, secret=API_SECRET)
    token = oauth2.Token(key=key, secret=secret)
    client = oauth2.Client(consumer, token)
    resp, content = client.request(url, method=http_method, body=post_body, headers=http_headers)
    return content
data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET)
Run Code Online (Sandbox Code Playgroud)

还尝试了我传递给def的变量的utf8编码值.

File "<pyshell#11>", line 1, in <module> 
    data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET) 
File "<pyshell#8>", line 6, in oauth_req
    body=post_body, headers=http_headers) 
File "C:\Python35-32\lib\site-packages\oauth2_init_.py", line 673, in request 
    req.sign_request(self.method, self.consumer, self.token) 
File "C:\Python35-32\lib\site-packages\oauth2_init_.py", line 493, in sign_request 
    self['oauth_body_hash'] = base64.b64encode(sha1(self.body).digest()) 
TypeError: Unicode-objects must be encoded before hashing 
Run Code Online (Sandbox Code Playgroud)

python-3.x

9
推荐指数
1
解决办法
1714
查看次数

JAXB:如何自定义双字段的Xml序列化

我有一个遗留类,有很多公共双字段.所有双字段都初始化Double.MAX_VALUE为表示它们是空的.(遗留序列化编码为忽略字段,如果字段等于则不进行序列化Double.MAX_VALUE).

我们现在尝试使用JAXB Marshaller将此类序列化为Xml.它工作正常,除了我们想要阻止为相等的字段生成Xml Double.MAX_VALUE.

我们没有使用单独的JAXB模式,只是用各种javax.xml.bind.annotation注释标记我们的类.如果使用模式,则可以添加<javaType>元素以指定自定义DataType转换器.有没有办法使用Annotations或以编程方式执行此操作?

在尝试下面推荐的方法后,我仍然无法XmlAdapter接受:

@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=Double.class), @XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=double.class)})
package tta.penstock.data.iserver;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
Run Code Online (Sandbox Code Playgroud)

我的顶级课程是:tta.penstock.data.iserver.OrderBlotter,其中包含一个扩展的tta.penstock.data.iserver.OrderResponseWrappers列表com.eztech.OrderResponse.所有双字段都包含在com.eztech.OrderResponse.

我的单元测试代码执行以下操作:

JAXBContext context = JAXBContext.newInstance(new Class[] { OrderBlotter.class, OrderResponseWrapper.class, OrderResponse.class});

Marshaller marshaller = context.createMarshaller();
StringWriter stringWriter = new StringWriter();
marshaller.marshal(blotter, stringWriter);
System.out.println("result xml=\n" + stringWriter.toString());
Run Code Online (Sandbox Code Playgroud)

但双重值仍然没有得到处理XmlAdapter.我知道我遗漏了一些基本的东西,但我不确定它是什么.

java jaxb xml-serialization

7
推荐指数
1
解决办法
1万
查看次数

java.io.IOException - IO流读取结束

代码似乎打破了session.connect.

com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read
    at com.jcraft.jsch.Session.connect(Session.java:534)
    at com.jcraft.jsch.Session.connect(Session.java:162)
    at session.connect in uploadFile(ftpService.java:280)
Run Code Online (Sandbox Code Playgroud)

try {
    JSch jsch = new JSch();
    Session session = null;
    session = jsch.getSession(ftpUserName, ftpServer, 22);
    session.setClientVersion("StrictHostKeyChecking");
    //session.setConfig("StrictHostKeyChecking", "no");
    session.setPassword(ftpPassword);
    session.connect();

    Channel channel = session.openChannel("sftp");
    channel.connect();
    ChannelSftp sftpChannel = (ChannelSftp) channel;
    //sftpChannel.get("remotefile.txt", "localfile.txt");
    String path="C:\\srcFolder";
    String remotePath="C:\\destFolder";
    try {
        sftpChannel.put(new FileInputStream(new File(path)), remotePath  );
    } catch (FileNotFoundException e) {
        // TODO …
Run Code Online (Sandbox Code Playgroud)

java sftp

7
推荐指数
1
解决办法
1万
查看次数

ConcurrentHashMap中String intern方法的重复数据删除

我看了一篇来自JavaDays的代码,作者说这种方法有概率非常有效,可以将类似String的字符串存储到String实习方法

 public class CHMDeduplicator<T> {
    private final int prob;
    private final Map<T, T> map;

    public CHMDeduplicator(double prob) {
        this.prob = (int) (Integer.MIN_VALUE + prob * (1L << 32));
        this.map = new ConcurrentHashMap<>();
    }

    public T dedup(T t) {
        if (ThreadLocalRandom.current().nextInt() > prob) {
            return t;
        }
        T exist = map.putIfAbsent(t, t);
        return (exist == null) ? t : exist;
    }
}
Run Code Online (Sandbox Code Playgroud)

请解释一下,这一行中概率的影响是什么:

if (ThreadLocalRandom.current().nextInt() > prob) return t;
Run Code Online (Sandbox Code Playgroud)

这是Java Days的原始演示文稿https://shipilev.net/talks/jpoint-April2015-string-catechism.pdf(56th slide)

java string dictionary duplicates concurrenthashmap

6
推荐指数
1
解决办法
247
查看次数

使用仪器测量物体尺寸

我使用了文章http://www.devinline.com/2016/05/java-instrumentation-fundamental-part-1.html?m=1

我需要获取查询结果的大小。

但召唤的

long sizeOfObject = InstrumentationAgent.findSizeOfObject(myvar);
Run Code Online (Sandbox Code Playgroud)

返回错误

代理未初始化。

我有带有 throws 的类的 main 方法,Exception 您能给出正确语法的建议吗?

版本: 代理代码:

package org.h2.command;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;

public class InstrumentationAgent {
    /*
     * System classloader after loading the Agent Class, invokes the premain
     * (premain is roughly equal to main method for normal Java classes)
     */
    private static volatile Instrumentation instrumentation;

    public static void premain(String agentArgs, Instrumentation instObj) {
        // instObj is handle passed by JVM
        instrumentation = instObj;
    }

    public static …
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
1
解决办法
4832
查看次数

字符串写在Raspberrypi上的python串口

我正在使用python语言在RPi中实现SIM900接口.但是,在port.write()函数中发送字符串时出现问题.

这是我的代码:

# This line has to write on serial port
port.write(b'AT+SAPBR=3,1,"APN","TATA.DOCOMO.INTERNET"\r\n') 
Run Code Online (Sandbox Code Playgroud)

以上行很好用......

现在我的要求是TATA.DOCOMO.INTERNET必须从命令行读取的字符串,我需要附加该字符串b'AT+SAPBR=3,1,"APN","xxxx"\r\n'.

但是当我试图将APN名称读入变量并且在追加它之后它不起作用时,代码行就是

# AP ="TATA.DOCOMO.INTERNET"-string read from serial input
AP = gsm.read() 
t1 = "AT+SAPBR=3,1,"
t2 = '"APN",'
t3 = AP
t4 = '\r\n'
t = t1 + t2 + t3 + t4
Run Code Online (Sandbox Code Playgroud)

它在python中的输出如下:

AT+SAPBR=3,1,"APN","TATA.DOCOMO.INTERNET"\r\n'
Run Code Online (Sandbox Code Playgroud)

它看起来像我需要的行,但是当我在gsm.write(t)中写入时它会出错,我甚至尝试过

gsm.write(byte(t))
gsm.write(t.encode())
Run Code Online (Sandbox Code Playgroud)

但是,它仍然无效.

python serial-port raspberry-pi

5
推荐指数
1
解决办法
563
查看次数

不输入参数扮演任何角色?

假设我有一个通用类Parcel和一个通用方法,如下面的代码所示.该方法打印并返回x,该方法在方法内分配了一个类型参数Integer.

public class Parcel<T> {
    public <X> X deliver(){
        X x = (X) new Integer(100);
        System.out.println(x);
        return x;
    }
}
Run Code Online (Sandbox Code Playgroud)

在main中,我通过传递一个类型参数Parcel来调用方法.但它仍然打印100.

public static void main(String args[]) {
    Parcel<String> parcel = new Parcel<>();
    System.out.println(parcel.<Parcel> deliver());
}
Run Code Online (Sandbox Code Playgroud)

接下来,在打印行中传递的类型参数Parcel不起任何作用,我在此预期会有异常.它是如何工作的 ?

java generics

5
推荐指数
1
解决办法
73
查看次数

类似于Numpy的python对象打印

在Ipython中进行数据分析时,我经常需要通过将其内容打印到shell来查看数据.Numpy只有在它们太长的时候才能显示巨大物体的边缘.我真的很喜欢ndarrays的这个功能,但是当我打印内部python对象(例如,带有15k对象的字典)时,它们会被转储到屏幕上,或者有时会以不太友好的方式被截断.因此,例如对于一个巨大的字典,我希望在输出中看到这样的东西

{ '39416' : '1397',  
  '39414' : '1397',  
  '7629'  : '7227',  
  ...,  
  '31058' : '9606',  
  '21097' : '4062',  
  '32040' : '9606' }  
Run Code Online (Sandbox Code Playgroud)

如果可以处理对齐和嵌套数据结构,那将是完美的.它们是一个特殊的模块,可以为python基类(list,dict)提供这样的功能吗?或者有一些我一无所知的ipython配置技巧?

python printing ipython

5
推荐指数
1
解决办法
65
查看次数

JSON泛型集合反序列化

我用Java编写了这样的DTO类:

public class AnswersDto {
    private String uuid;
    private Set<AnswerDto> answers;
}

public class AnswerDto<T> {
    private String uuid;
    private AnswerType type;
    private T value;
}

class LocationAnswerDto extends AnswerDto<Location> {
}

class JobTitleAnswerDto extends AnswerDto<JobTitle> {
}

public enum AnswerType {
    LOCATION,
    JOB_TITLE,
}

class Location {
    String text;
    String placeId;
}

class JobTitle {
    String id;
    String name;
}
Run Code Online (Sandbox Code Playgroud)

在我的项目中,Jackson库用于JSON的序列化和反序列化.

如何配置AnswersDto(使用特殊注释)或AnswerDto(注释)类,以便能够AnswersDto在其正文中正确地反序列化请求,例如:

{
    "uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
    "answers": [
        {
            "uuid": "e82544ac-1cc7-4dbb-bd1d-bdbfe33dee73",
            "type": "LOCATION",
            "value": …
Run Code Online (Sandbox Code Playgroud)

java spring json generic-collections deserialization

5
推荐指数
1
解决办法
498
查看次数